簡體   English   中英

上課沒有外鍵

[英]class has no foreign key to class

我的Django模型設置如下:

class Cities(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, unique=True)

    def __unicode__(self):
        return self.name


class Pincode(models.Model):
    id = models.AutoField(primary_key=True)
    pin = models.CharField(max_length=20, unique=True)

    def __unicode__(self):
        return self.pin


class Address(models.Model):
    id = models.AutoField(primary_key=True)
    build_add = models.CharField(max_length=255)
    street_add = models.CharField(max_length=255)
    area = models.CharField(max_length=255)
    city = models.ForeignKey(Cities)
    pin = models.ForeignKey(Pincode)

    def __unicode__(self):
        return self.area


class Classified(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    contact_person = models.CharField(max_length=300, blank=True)
    email = models.CharField(max_length=100, blank=True)
    address = models.ForeignKey(Address)
    subcategory = models.ForeignKey(Subcategory)
    area_code = models.CharField(max_length=10, blank=True,  default='')
    phone_number = models.BigIntegerField(max_length=20, default=0, blank=True)
    secondary_number = models.BigIntegerField(max_length=20, default=0, blank=True)
    more_numbers = models.CharField(max_length=300, default='', blank=True)
    image = S3DirectField(upload_to='s3direct', blank=True)
    secondary_image = S3DirectField(upload_to='s3direct', blank=True, default='')
    description = models.TextField(max_length=1000, blank=True)
    location = LocationField(blank=True, max_length=255)
    NO = 'NO'
    YES = 'YES'
    APPROVAL = ((NO, 'no'), (YES, 'yes'))
    active = models.CharField(choices=APPROVAL, default=NO, max_length=3)
    verified = models.CharField(choices=APPROVAL, default=NO, max_length=3)

我的問題是,因為我需要在每個條目數據與執行內聯做Classified中進行編輯Classified在管理本身的看法。

我已經嘗試了以下方法在同一視圖中編輯地址

class AddressInline(admin.TabularInline):
    model = Address


class ClassifiedAdmin(admin.ModelAdmin):
    inlines = [AddressInline, ]
    search_fields = [
        'name',
    ]


admin.site.register(Classified, ClassifiedAdmin)

但是,這給了我以下錯誤:

<class 'appname.models.Address'> has no ForeignKey to <class'appname.models.Classified'>

我該如何解決這個錯誤? 在嘗試內聯模型Django admin中的 內聯時,我已經查看並嘗試了Django中<class>到<class>沒有外鍵的解決方案:沒有ForeignKey但它們似乎對我沒有用。

您的內聯代碼可能寫錯了。 內聯應該用於從屬模型實例。 因此,您可以在Address進行Classified ,但不能相反,因為Classified取決於具有外鍵關系的Address 如果您具有外鍵關系,則可以只使用常規字段,表單最終會帶有一個選擇框,用於選擇地址。 如果您確實希望一個Classified對象出現在多個地址中,請使用ManyToManyField而不是ForeignKey ,然后Django會自動為您生成一個中間表。

另外,您在代碼中不需要AutoField行。 Django默認會生成一個屬性名稱為'id'的自動遞增主鍵。

暫無
暫無

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

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