簡體   English   中英

Django多個關系超過2個應用程序

[英]Django manytomany relationship over 2 apps

我正在嘗試創建一個客戶可以喜歡供應商和商店的關系,並在我的類圖上(見下圖)我有以下關系:

在第一個應用程序中,我有一個person對象,由供應商和客戶端繼承在第二個應用程序中,我只有一個商店對象(與供應商有向后關系,但它沒有在類圖上顯示,這就是第二個應用程序即時)

問題是客戶端與供應商有很多關系,而另一個與商店有很多關系,但關系客戶端/存儲生成錯誤,導致app2在應用1之后失效。

有沒有辦法讓通用的多種關系?

因為客戶可以擁有許多供應商和許多商店,商店可以擁有許多客戶,供應商可以擁有許多客戶

類圖

我使用的代碼:

class Store(models.Model):
    name = models.CharField("Nome", max_length=100)
    description = models.CharField("Descrição", max_length=300)

    class Meta:
        app_label = 'store'

class Person(models.Model):
    first_name = models.CharField("Primeiro Nome", max_length=100)
    last_name = models.CharField("Ultimo Nome", max_length=100)

    class Meta:
        app_label = 'core'


class Vendor(Person):
    bio = models.TextField("Bio", max_length=300, blank=True)
    last_update = models.DateTimeField("Ultima Atualização", auto_now=True)

    class Meta:
        app_label = 'core'


class Client(Person):
    favorite_stores = models.ManyToManyField(Store)
    favorite_vendors = models.ManyToManyField(Vendor)

    class Meta:
        app_label = 'core'

此代碼給出了以下錯誤:

self.models_module = import_module(models_module_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/core/models.py", line 7, in <module>
    from store.models import Store
  File "/store/models.py", line 6, in <module>
    from core.models import Vendor

而我想在管理員中看到的很簡單: 管理

只需添加兩個ManyToMany關系,而不是導入“Store”模型,直接使用字符串(以避免循環依賴)

class Client(Person):
   favorite_stores = models.ManyToManyField('store.Store')
   favorite_vendors = models.ManyToManyField(Vendor)

這里有兩個錯誤。 最明顯的是你有一個循環依賴:一個模型導入另一個,導入第一個...你可以通過不導入模型,並通過字符串引用另一個來逃避這一點。

另一個錯誤是我在這里看到了很多。 您不希望客戶端模型的兩側都有ManyToMany。 實際上,Client Store和Vendor之間多對多關系的鏈接表。 因此,你實際上需要雙方的ForeignKeys。

所以,客戶應該是:

class Client(Person):
    favorite_stores = models.ForeignKey('core.Store')
    favorite_vendors = models.ManyToManyField('core.Vendor')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM