Mutual relationship between two Django models

217 Views Asked by At

I have the (simple, I suppose) need of having a situation like so: there are many profiles, and there are many ensembles, and each profile has to be able to be part of one or more ensembles. This is my code:

class Ensemble(models.Model):

    ensembleName = models.CharField(max_length=200)
    members = models.ManyToManyField('Profile', related_name='members')

    def __str__(self):
        return self.ensembleName

class Profile(models.Model):

    ensemble = models.ForeignKey(Ensemble, on_delete=models.CASCADE, blank=True, null=True)
[...]

It all works well, but to an extent. From the Django administration I can, from the 'ensemble' page, select its members. I can also select, from the 'profile' page, which ensembles that profile belongs. The issue is: they are not synchronised: if I add a profile to an ensemble via the 'profile' page this is not reflected in the 'ensemble' page and the other way round, i.e. in the 'profiles details' page I don't see the ensemble to which I previously assigned that profile from the 'ensemble' page.

My form

class ProfileUpdateForm(forms.ModelForm):

    class Meta:
        model = Profile
        fields = ('image', 'role', 'skills', 'gender', etc...)

class EnsemblesForm(forms.ModelForm):

    class Meta:
        model = Ensemble
        fields = ('ensemble_name',)

    def __init__(self, *args, **kwargs):
        super(EnsemblesForm, self).__init__(*args, **kwargs)
        self.fields['ensemble_name'].queryset = (obj for obj in Ensemble.objects.all()) #This doesn't output anything
0

There are 0 best solutions below