类没有对类的外键
我在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
的视图中编辑每个条目的数据。
我尝试了以下方法来在同一视图中编辑地址:
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'>
我该如何解决这个错误呢?我查看并尝试了<class>在Django中没有外键到<class>时的内联模型和Django管理后台的内联:没有ForeignKey的解决方案,但对我来说似乎都不管用。
1 个回答
1
你的内联写反了。内联应该用在依赖的模型实例上。比如,你可以在一个 Address
中放一个 Classified
,但反过来就不行,因为 Classified
是依赖于 Address
的,二者之间有外键关系。如果你有外键关系,其实可以用普通字段来代替,这样表单里就会出现一个下拉框,让你选择地址。如果你真的想让一个 Classified
对象出现在多个地址中,那就用 ManyToManyField
,而不是 ForeignKey
,这样 Django 会自动为你生成一个中间表。
另外,你的代码里不需要 AutoField
的那几行。Django 默认会生成一个名为 'id' 的自增主键。