我正面临以下情况;
#models.py
class A(models.Model):
dog = models.CharField(...)
cat_values = models.ManyToManyField(B, through='AtoB')
class AtoB(models.Model):
one = models.ForeignKey(A)
two = models.ForeignKey(B)
class B(models.Model):
cat = models.CharField(...)
#admin.py
class BForm(forms.ModelForm):
cat = forms.TextInput()
class Meta:
model = A.cat_values.through
exclude = []
class BInline(admin.TabularInline):
model = B.cat_values.through
form = BForm
fields = ['cat', ]
readonly_fields = ['cat', ]
@admin.register(A)
class AAdmin(admin.ModelAdmin):
inlines = [BInline,]
当我尝试运行服务器时,出现以下错误消息;
:(admin.E035)'readonly_fields [0]'的值不可调用,'BInline'的属性或'agregator.AtoB的属性'。
没有其他访问方式像A.cat_values
或A.cat_values.two
我部分了解问题的根源。它不允许我访问B的属性,而只能访问AtoB的属性。我尝试解决此问题,但未成功。阅读了文档,但是在这种情况下,只有在没有通过模型定义的情况下,才可以访问属性。
例如https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/或https://docs.djangoproject.com/en/3.1/topics/db/models/
我需要在A的管理员的内联中显示cat
属性。任何帮助将不胜感激。
答案 0 :(得分:0)
所以我已经解决了这个问题。关键是为AtoB
模型定义属性。
例如;
class AtoB(models.Model):
one = models.ForeignKey(A)
two = models.ForeignKey(B)
@property
def cat(self):
return self.two.cat