繁体   English   中英

Django管理员未显示外键字段的选择

[英]Django admin not showing choices for Foreign key field

我正在创建一个小型聊天应用程序,由于用于现场chatMessagemie模型的下拉列表,我在管理员中创建消息时遇到问题。 请注意,在下面的图片中,它没有显示与“ Conversation模型关联的必需值。 该值conversation在现场Conversation模型接受的形式为“数编号”,例如5-1011-21等。注意,我已经创建了一个机构未示出,低于该这样的输入格式转换成用于非字符串Django管理员输入(当用户开始新对话时)。

conversation字段的类型为CharField 我怀疑Django管理表单未显示所需值的原因是由于field类型,但是我不确定。 也可能是因为Django管理员没有将输入转换为字符串,因此在下拉列表中仅显示了Conversation object 为什么Django管理员未为chat输入字段显示正确的值?

@python_2_unicode_compatible
class Conversation(models.Model):
    conversation = models.CharField(unique=True, max_length=150)
    email_1 = models.ForeignKey(Usermie, to_field="email", related_name="email_1_convo")
    email_2 = models.ForeignKey(Usermie, to_field="email", related_name="email_2_convo")



@python_2_unicode_compatible
class Messagemie(models.Model):
    sender = models.ForeignKey(Usermie, to_field="email", related_name="email_sender")
    receiver = models.ForeignKey(Usermie, to_field="email", related_name="email_receiver")
    # The username is the sender's username
    sender_username = models.CharField( max_length=50)
    receiver_username = models.CharField(max_length=50)
    message = models.TextField()
    chat = models.ForeignKey(Conversation, to_field="conversation", related_name="conversation_chat")

该图显示了管理员中Messagemie模型chat字段的选择

在此处输入图片说明

Conversation模型Django admin中输入值的图片。 在此处输入图片说明

Django admin在下拉列表中显示对象的字符串表示形式。 这可以通过调用str(object) 您可以通过重写类中的__str__方法来修改此行为。

Django基本模型类( django.db.models.Model )的实现具有以下类似的实现(对于python3)-

def __str__(self):
    return str('%s object' % self.__class__.__name__)

解释您看到的内容。 self.__class__.__name__计算结果为"Conversation" ,因此您最终在下拉列表中看到"Conversation object"

若要更改此行为,可以重写__str__方法以获取所需的值。 下面是一个示例实现。 您可以轻松地修改方法以包含所需的任何逻辑。

class Conversation(models.Model):
    conversation = models.CharField(unique=True, max_length=150)
    email_1 = models.ForeignKey(Usermie, to_field="email", 
                               related_name="email_1_convo")
    email_2 = models.ForeignKey(Usermie, to_field="email", 
                                related_name="email_2_convo")

    def __str__(self):
        return self.conversation

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM