我有这两个类:
class Test(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User)
groups = models.ManyToManyField(Group)
class TestSubjectSet(models.Model):
id = models.AutoField(primary_key=True)
test = models.ForeignKey(Test)
subject = models.ManyToManyField(Subject)
TestSubjectSet表单测试列表仅显示字符串“test object”。
答案 0 :(得分:25)
您必须在模型类中添加__unicode__(self)
或__str__(self)
方法。
答案 1 :(得分:3)
有同样的问题。添加
def __str__(self):
return self.user
解决了这个问题。
答案 2 :(得分:1)
有时您希望从 str 函数返回不同的信息,但希望在admin下拉菜单中显示一些不同的信息。然后上述解决方案将不起作用。
您可以通过对form.ModelChoiceField进行子类化来实现此目的。
class TestChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "Test: {}".format(obj.id)
然后您可以覆盖formfield_for_foreignkey
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'test':
return TestChoiceField(queryset=Test.objects.all())
return super().formfield_for_foreignkey(db_field, request, **kwargs)