如何从def __str__函数中获取特定的外键?

时间:2019-06-07 09:56:35

标签: python django django-models

我有一个类(表4),其中有两个到另一个类(表3)的外键(主题和问题)。现在,当我在django管理站点中为table4输入数据时,我只希望插入table3中的主题名称出现,而只希望将插入table3中的问题出现在滑块中。 反正有做吗?

class table3(models.Model):
    id1=models.IntegerField(default=0)
    topic=models.CharField(max_length=222)
    question=models.CharField(max_length=222)
    answer=models.CharField(max_length=222)

    def __str__(self):
        return self.question

#for the user to enter
class table4(models.Model):
    username = models.CharField(max_length=222)
    topic1 = models.ForeignKey(table3, related_name='topic1',on_delete=models.CASCADE)
    question1=models.ForeignKey(table3, related_name='question1',on_delete=models.CASCADE)
    answer = models.CharField(max_length=222)

    def __str__(self):
        return self.username

1 个答案:

答案 0 :(得分:1)

您只需要两个替代即可。

首先创建两个类,然后在外键选项中返回要显示的所需文本。

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)

现在在以下模型的管理员中添加以下功能。

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)