[英]Django admin not showing choices for Foreign key field
我正在创建一个小型聊天应用程序,由于用于现场chat
的Messagemie
模型的下拉列表,我在管理员中创建消息时遇到问题。 请注意,在下面的图片中,它没有显示与“ Conversation
模型关联的必需值。 该值conversation
在现场Conversation
模型接受的形式为“数编号”,例如5-10
, 11-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
字段的选择
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.