Как я могу установить ForeignKey для определенного атрибута из другой таблицы? - PullRequest
0 голосов
/ 14 ноября 2018

Это мой первый класс Klant, что означает клиент. У него есть идентификатор, имя-клиента и пользователи от клиента, который представляет собой ManyToManyField и ссылается на пользователей из Таблицы пользователей, которую дает мне django.

class Klant(models.Model):
    id = models.AutoField(primary_key=True)
    klant_naam = models.CharField(max_length=100, default='-')
    klant_gebruiker = models.ManyToManyField(User)

    def __str__(self):
        return str(self.id) + " - " + self.klant_naam

Это класс Actie (действие или действие, которое определяет пользователь) с идентификатором, именем действия, датой действия, датой окончания (крайним сроком), идентификатором клиента, к которому относится Klant и actie_gebruiker, которые я хочу сослаться на klant_gebruiker из таблицы Klant.

class Actie(models.Model):
    id = models.AutoField(primary_key=True)
    actie_naam = models.CharField(max_length=150, default='-')
    actie_aanmaakdatum = models.DateTimeField(default=datetime.now())
    actie_einddatum = models.DateTimeField(default=datetime.now() + timedelta(days=1))
    actie_klant = models.ForeignKey(Klant, default=1)
    actie_gebruiker = models.ForeignKey(Klant.klant_gebruiker, default=1)

    def __str__(self):
        return str(self.id) + " - " + self.actie_naam

Так что мой вопрос сейчас заключается в том, что мне нужно сделать, чтобы установить значение actie_gebruiker для атрибута klant_gebruiker из таблицы Klant?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

То, что вы хотите, это параметр to_field в ForeignKeyField В вашем случае это было бы как actie_gebruiker = models.ForeignKey(Klant, to_field='klant_gebruiker' default=1)

Но есть проблема, ваш klant_gebruiker - это ManyToManyField. Это означает, что в базе данных есть еще одна соединительная таблица, в которой хранится внешний ключ к Klant, а один - к целевой таблице, которая в вашем примере является User. klant_gebruiker фактически не существует в вашей таблице.

Что вы можете сделать, это создать сквозную таблицу и сделать так, чтобы ваш actie_gebruiker указывал на поле внешнего ключа, указывающее на таблицу Klant, но таких записей может быть несколько

0 голосов
/ 14 ноября 2018

Полагаю, вам нужно использовать параметр through для определения ManyToManyField.

class Klant(models.Model):
    id = models.AutoField(primary_key=True)
    klant_naam = models.CharField(max_length=100, default='-')
    klant_gebruiker = models.ManyToManyField(User, through='Actie')

    def __str__(self):
        return str(self.id) + " - " + self.klant_naam


class Actie(models.Model):
    id = models.AutoField(primary_key=True)
    actie_naam = models.CharField(max_length=150, default='-')
    actie_aanmaakdatum = models.DateTimeField(default=datetime.now())
    actie_einddatum = models.DateTimeField(default=datetime.now() + timedelta(days=1))
    actie_klant = models.ForeignKey(Klant)
    actie_gebruiker = models.ForeignKey(User)

    def __str__(self):
        return str(self.id) + " - " + self.actie_naam
...