我正在制作一個庫存系統,我希望能夠跟蹤的一件事是轉移。我有兩個模型
class Location(models.Model):
class FacilityChoices(models.TextChoices):
warehouse = 'Warehouse'
location = 'Location'
name = models.CharField(max_length=255, null=False, blank=False)
street_ad = models.CharField(max_length=128, verbose_name='Street address')
city_ad = models.CharField(max_length=128, verbose_name='City Address')
state_prov = models.CharField(max_length=30, verbose_name='State/Province')
country = models.CharField(max_length=50, verbose_name='Country')
zip_code = models.CharField(max_length=20, verbose_name='Zip/Postal code')
facility_type = models.CharField(max_length=30, choices=FacilityChoices.choices, default=FacilityChoices.warehouse)
...
class Transfer(models.Model):
item = models.ForeignKey(Stock, on_delete=models.CASCADE)
quantity = models.IntegerField()
location_send = models.ForeignKey(Location, on_delete=models.CASCADE)
location_receive = models.ForeignKey(Location, on_delete=models.CASCADE)
但是當我這樣做時我收到一個錯誤(fields.E304)。實作這一目標的最佳方法是什么?
uj5u.com熱心網友回復:
通過創建此外鍵關系,將從位置到傳輸進行反向查找,默認情況下由 django 命名為“location.transfer_set”。但是有兩個欄位具有相同的關系名稱。為了解決這個問題,您需要添加一個 related_name 引數來指定查找名稱。
class Transfer(models.Model):
item = models.ForeignKey(Stock, on_delete=models.CASCADE)
quantity = models.IntegerField()
location_send = models.ForeignKey(Location, related_name="transfer_send", on_delete=models.CASCADE)
location_receive = models.ForeignKey(Location, related_name="transfer_receive", on_delete=models.CASCADE)
要禁用這種向后關系,您可以將 related_name 設定為“ ”或以“ ”結尾
uj5u.com熱心網友回復:
你的錯是這個模型:-
class Transfer(models.Model):
item = models.ForeignKey(Stock, on_delete=models.CASCADE)
quantity = models.IntegerField()
location_send = models.ForeignKey(Location, on_delete=models.CASCADE)
location_receive = models.ForeignKey(Location, on_delete=models.CASCADE)
你需要更新這個:-
class Transfer(models.Model):
item = models.ForeignKey(Stock,related_name='Stock_item' ,on_delete=models.CASCADE)
quantity = models.IntegerField()
location_send = models.ForeignKey(Location,related_name='send_location', on_delete=models.CASCADE)
location_receive = models.ForeignKey(Location,related_name='receive_location', on_delete=models.CASCADE)
Django 中使用的相關名稱是什么
related_name 屬性指定從 User 模型回傳到您的模型的反向關系的名稱。
如果您沒有指定 related_name,Django 會自動使用您的模型名稱和后綴 _set 創建一個,例如 User.map_set.all()。
如果你指定。related_name=maps 在 User 模型上,User.map_set 仍然有效,但 User.maps. 語法顯然更簡潔,不那么笨重;例如,如果您有一個用戶物件 current_user,您可以使用 current_user.maps.all() 來獲取與 current_user 有關系的 Map 模型的所有實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/352961.html
