这是我的头等舱客轮,意味着客户。它有一个id,一个客户名,来自该客户的用户是一个ManyToManyField,它引用了User表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(操作或用户确定的操作)类别,其中具有ID,操作名称,操作发布日期,结束日期(截止日期),客户ID所指我想从表Klant中引用klant_gebruiker和Klant和actie_gebruiker。
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
所以我现在的问题是我该怎么做才能将表Klant中的actie_gebruiker的值设置为属性klant_gebruiker?
答案 0 :(得分:0)
我相信您需要对ManyToManyField定义使用through
参数。
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
答案 1 :(得分:0)
您想要的是ForeignKeyField上的to_field参数
在你的情况下
actie_gebruiker = models.ForeignKey(Klant, to_field='klant_gebruiker' default=1)
但是有一个问题,您的klant_gebruiker是ManyToManyField。 这意味着在数据库中,还有另一个连接表,该表保留指向Klant的前键,而保留至目标表的前一个键(在您的示例中为User)。 您的表中实际上不存在klant_gebruiker。
您可以做的是创建一个穿透表,并使actie_gebruiker指向指向Klant Table的外键字段,但是可以有多个这样的记录