[英]Django use only one column of Model1 as a foreign key in second model
我有兩個 Django 模型(事件和 GMSEvents)。
我想使用事件模型的 eventAcronym 作為 GMSEvents 中的外鍵。 我嘗試如下,但我收到錯誤
AssertionError: ForeignKey(<django.db.models.query_utils.DeferredAttribute object at 0x000002032DA1E8C8>) is invalid. First parameter to ForeignKey must be either a model,
a model name, or the string 'self'
class Events(models.Model):
eventAcronym = models.CharField(max_length=4, blank=False, null=False)
eventName = models.CharField(max_length=30, blank=False, null=False)
def __str__(self):
return f"{self.eventAcronym} - {self.eventName}"
class GMSEvents(models.Model):
gateNo = models.IntegerField(blank=False, null=False)
aircraftName = models.CharField(max_length=15, blank=False, null=False)
detectEvent = models.ForeignKey(Events.eventAcronym, on_delete=models.CASCADE)
timeStamp = models.DateTimeField()
您應該將eventAcronym
標記為unique ,否則它本身並不指代唯一元素:
class Events(models.Model):
eventAcronym = models.CharField(max_length=4, unique=True)
# …
那么你可以使用to_field=…
參數 [Django-doc]來指定目標列:
class GMSEvents(models.Model):
gateNo = models.IntegerField()
aircraftName = models.CharField(max_length=15)
detectEvent = models.ForeignKey(
Events, to_field='eventAcronym',
on_delete=models.CASCADE
)
timeStamp = models.DateTimeField()
嘗試將primary_key=True添加到 eventAcronym 字段。 detectEvent = models.ForeignKey(Events, on_delete=models.CASCADE)
class Events(models.Model):
eventAcronym = models.CharField(max_length=4, primary_key=True)
eventName = models.CharField(max_length=30, blank=False, null=False)
def __str__(self):
return f"{self.eventAcronym} - {self.eventName}"
class GMSEvents(models.Model):
gateNo = models.IntegerField(blank=False, null=False)
aircraftName = models.CharField(max_length=15, blank=False, null=False)
detectEvent = models.ForeignKey(Events, on_delete=models.CASCADE)
timeStamp = models.DateTimeField()
ForeignKey
字段的第一個參數應該是您想要關聯的模型類,而不是特定字段(即Events
而不是Events.eventAcronym
)。 Django 會自動使用該模型的主鍵作為外鍵列:
class Events(models.Model):
# add `primary_key=True` here if you don't want to use the implicit ID field
eventAcronym = models.CharField(max_length=4, blank=False, null=False)
eventName = models.CharField(max_length=30, blank=False, null=False)
class GMSEvents(models.Model):
gateNo = models.IntegerField(blank=False, null=False)
aircraftName = models.CharField(max_length=15, blank=False, null=False)
detectEvent = models.ForeignKey(Events, on_delete=models.CASCADE)
timeStamp = models.DateTimeField()
如需參考,請參閱https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.ForeignKey
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.