如何从def\uu str\uuuuuuu函数中获取特定外键?

2024-04-24 22:41:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类(表4),有两个外键(topic和question)指向另一个类(表3)。现在,当我在django管理站点中输入表4的数据时,我只希望表3中插入的主题名出现,并且只有表3中插入的问题出现在滑块中。 有什么办法吗

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

Tags: answerselftopicmodelreturnmodelsdefusername
1条回答
网友
1楼 · 发布于 2024-04-24 22:41:24

你只需要两个覆盖就可以了

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

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)

相关问题 更多 >