以下是模型定义:
class ItemBrand(models.Model):
name = models.CharField(max_length = 30, unique = True)
def __unicode__(self):
return self.name
class WantedItem(models.Model):
name = models.CharField(max_length = 120)
description = models.TextField()
created = models.DateTimeField(auto_now = False, auto_now_add = True)
expires = models.DateTimeField(auto_now = False, auto_now_add = False)
type = models.ForeignKey(ItemType, related_name = "type wanted")
GENDER_CHOICES = (
(1, 'Male'),
(2, 'Female')
)
gender = models.IntegerField(choices = GENDER_CHOICES)
brands = models.ManyToManyField(ItemBrand, related_name = "wantedbrands", symmetrical = False)
colors = models.ManyToManyField(ItemColor)
sizes = models.ManyToManyField(ItemSize)
creator = models.ForeignKey(User, related_name = "wishlist creator")
def __unicode__(self):
return self.name
这是AdminModel代码:
class BrandsInline(admin.TabularInline):
model = WantedItem.brands.through
class WantedItemAdmin(admin.ModelAdmin):
list_display = ('name', 'created', 'expires', 'type', 'gender', 'creator')
search_fields = ('name', 'description')
list_filter = ('created', 'brands',)
ordering = ('-created',)
inlines = [
BrandsInline,
]
exclude = ('brands',)
这基本上是从Django文档中提取的,这是我得到的错误:
'ReverseManyRelatedObjectsDescriptor'对象没有属性'through'
我完全失去了......任何想法?即使我真的创建了一个链接表并在Model中设置了“through”属性,我也会得到同样的错误。
破碎?
答案 0 :(得分:2)
您需要将Django升级到主干。
在django开发版(see docs)中使用包含多对多字段的内联新内容。
使用模型的简化版本,我得到与Django 1.1.1相同的错误,但它适用于主干(版本11785)。
另外,您无需在symmetrical = False
ManyToMany字段中指定ItemBrand
。对称选项仅用于递归关系,例如User <-> User
。
您可能需要查看documentation on related names,并考虑将它们重命名为更符合逻辑的内容。如果creator
是User
对象,并且想要获取他们创建的一组愿望清单,那么未指定related_name
时的默认值为
creator.wishlist_set.all()
选择related_name
(当您添加下划线时),此更改为
creator.wishlist_creator.all()
但我建议related_name='wishlists'
,在这种情况下你会使用
creator.wishlists.all()
答案 1 :(得分:1)
虽然它可能不是导致错误的原因,但related_name
属性中的空格无效,所以我首先尝试删除它们。
“type wanted”=&gt; “type_wanted”
“wishlist creator”=&gt; “wishlist_creator”