Как создать таблицу с двумя полями в качестве типа модели User - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь создать приложение обмена сообщениями в своем проекте Django, я хочу, чтобы в таблице было три поля: "sender" "title" "message" "receiver". Заголовок и сообщение могут быть объявлены как char-field. Но я не могу сделать отправителя и получателя как два поля ForeignKey. Я не знаю, что использовать здесь. Может ли кто-нибудь помочь мне понять это?

Я попытался объявить оба поля как ForeignKey с пользовательской моделью. Но это не сработало.

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class msgs(models.Model):
    to = models.OneToOneField(User, on_delete=models.CASCADE)
    frm = models.OneToOneField(User, on_delete=models.CASCADE)
    title = models.CharField(max_length = 255)
    body = models.CharField(max_length=2000)

ОШИБКА:

msgs.msgs.frm: (fields.E304) Reverse accessor for 'msgs.frm' clashes with reverse accessor for 'msgs.to'.<br>
        HINT: Add or change a related_name argument to the definition for 'msgs.frm' or 'msgs.to'.<br>
msgs.msgs.frm: (fields.E305) Reverse query name for 'msgs.frm' clashes with reverse query name for 'msgs.to'.<br>
        HINT: Add or change a related_name argument to the definition for 'msgs.frm' or 'msgs.to'.<br>
msgs.msgs.to: (fields.E304) Reverse accessor for 'msgs.to' clashes with reverse accessor for 'msgs.frm'.<br>
        HINT: Add or change a related_name argument to the definition for 'msgs.to' or 'msgs.frm'.<br>
msgs.msgs.to: (fields.E305) Reverse query name for 'msgs.to' clashes with reverse query name for 'msgs.frm'.<br>
        HINT: Add or change a related_name argument to the definition for 'msgs.to' or 'msgs.frm'.<br>

1 Ответ

0 голосов
/ 20 июня 2019

Как говорится в сообщении об ошибке, поскольку у вас есть две связи с одной и той же моделью, вам необходимо указать для них связанное имя.

class msgs(models.Model):
    to = models.OneToOneField(User, on_delete=models.CASCADE, related_name='to_user')
    frm = models.OneToOneField(User, on_delete=models.CASCADE, related_name='from_user')
    title = models.CharField(max_length = 255)
    body = models.CharField(max_length=2000)

Несколько других советов:

  • Используйте заглавные буквы для имени класса (класс Message или класс Msg)
  • Используйте models.ForeignKey вместо models.OneToOneField, если вы хотите, чтобы пользователи имели несколько разговоров
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...