所以我有三个类,如下所示。 当我输入表4的数据时,当我输入主题名称时,我只希望所选主题的问题出现在问题字段的下拉列表中。 有什么办法吗? 另外,在admin.py中,我仅注册了表。
class table5(models.Model):
topic_name=models.CharField(max_length=222,primary_key=True)
def __str__(self):
return self.topic_name
class table3(models.Model):
id1=models.IntegerField(default=0)
topic=models.ForeignKey(table5, related_name='topic1',on_delete=models.CASCADE)
question=models.CharField(max_length=222,primary_key=True)
answer=models.CharField(max_length=222)
def __str__(self):
return self.question
class table4(models.Model):
username = models.CharField(max_length=222,primary_key=True)
topic=models.ForeignKey(table5, related_name='topic111',on_delete=models.CASCADE)
question1=models.ForeignKey(table3, related_name='question3',on_delete=models.CASCADE)
answer = models.CharField(max_length=222)
def __str__(self):
return self.username
答案 0 :(得分:0)
您只需要两个替代即可。
首先创建两个类,然后在外键选项中返回要显示的所需文本。
class QuestionChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "Question: {}".format(obj.question)
class TopicChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return "Topic: {}".format(obj.topic)
现在在以下模型的管理员中添加以下功能。
class QuestionAnswerAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'question':
return QuestionChoiceField(queryset=Table3.objects.all())
if db_field.name == 'topic':
return TopicChoiceField(queryset=Table3.objects.all())
return super().formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(table4, QuestionAnswerAdmin)