0

Итак, вот проблема, с которой я сталкиваюсь с этой моделью Django.Модели Django: укажите одно и то же поле дважды в fk-модели

У меня есть ключ foriegn к классу SecretSantaGroup в классовых цессионариях, называемых группой. Я хочу ссылаться на этот fk в создателе и правопреемнике.

довольно много данных, что я хочу, как это: создателя = self.group.members цессионария = self.group.members

Но у меня возникают проблемы при переходе об этом и может использовать некоторую помощь.

Я хочу, чтобы иметь возможность ссылаться на всех пользователей в этой конкретной группе, просто имея проблемы с этим.

class SecretSantaGroups(models.Model): 
    groupName = models.TextField() 
    members = models.ManyToManyField(User) 


    def __str__(self): 
     return self.groupName 

    class Meta: 
     verbose_name_plural = 'Secret Santa Groups' 

class assignees(models.Model): 
    group = models.ForeignKey(SecretSantaGroups) 
    #person that gives gifts 
    creator = models.ForeignKey(self.group.members, null=True) 
    #person who receives gift 
    assignee = models.ForeignKey(self.group.members, null=True) 

EDIT --- Я использовал страшную формулировку, класс правопреемников должен быть тем, кто получает, кто в группе. 1 человек получает другую в каждой секретной группе. так gifter и giftee

class assignees(models.Model): 
    group = models.ForeignKey(SecretSantaGroups) 
    #person that gives gifts 
    giver = models.???(self.group.members, null=True) 
    #person who receives gift 
    giftee = models.???(self.group.members, null=True) 
+0

Ваша модель «правопреемников» не имеет смысла. Что вы ожидаете от внешнего ключа для создателя и правопреемника? Кроме того, я бы предложил использовать правильные соглашения об именах для ваших моделей; singleluar и TitleCased. Имена классов Python должны * всегда начинаться с заглавной буквы. – Brandon

+0

Я не был слишком сосредоточен на конвенции именования. Я хочу, чтобы создатель и правопреемник обращались к членам группы. Я исправлю соглашение после того, как они связаны. – McFads

+0

Это все еще не имеет никакого смысла. Вы хотите обратиться к конкретному пользователю, но только от пользователей, которые находятся в 'group.members'? – Brandon

ответ

0

Если я не ошибаюсь, кажется, что вы пытаетесь сделать, это определить связь со всеми возможными пользователей для SecretSantaGroup, а затем определить, какие из этих пользователей «назначен «или что бы вы ни назвали.

Я также не знаю, если вы хотите изменить их в Django администратора или часть другой точки зрения, но как бы я определить модель как таковой:

class SecretSantaGroup(models.Model): 
    name = models.CharField(max_length=255) 
    creator = models.ForeignKey(User, related_name='creator') 
    members = models.ManyToMany(User, related_name='members') 
    assigned = models.ManyToMany(User, related_name='assigned', blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

Если вы хотите ограничить выбор «назначенного» в администраторе Django, вам нужно сделать это в два этапа. Во-первых, вам нужно будет назначить какие-то члены, тогда вам нужно будет назначить QuerySet «назначено» объектам в members, поэтому выбор ограничен, а затем вы можете назначить нужные вам.

Это можно сделать с помощью пользовательской формы. Я НЕ проверил этот код:

class SecretSantaGroupForm(forms.ModelForm): 
    class Meta: 
     model = SecretSantaGroup 

    def __init__(self, *args, **kwargs): 
     super(SecretSantaGroupForm, self).__init__(*args, **kwargs) 
     self.fields['assigned'].queryset = self.instance.members.all() 

Затем вы можете назначить пользовательскую форму для администратора модели.

Если вы делаете это на публичной стороне, вам все равно потребуется переопределить тот же тип, и вам все равно придется сделать это в два шага, насколько я могу судить. Надеюсь, что это поможет тебе.

Смежные вопросы