【问题标题】:ValueError: Cannot assign "<User: username>": "MessageModel.user_name" must be a "Room" instanceValueError:无法分配“<用户:用户名>”:“MessageModel.user_name”必须是“房间”实例
【发布时间】:2023-03-25 06:50:02
【问题描述】:

我有 ita MessageModel,它有一个字段 user_name,它是 Room 模型的一个实例。我想保存当前用户内联的所有消息,但是当我尝试保存作为房间模型实例的用户名时......发生错误,例如--> ValueError:无法分配“”:“MessageModel.user_name " 必须是一个 "Room" 实例。 我有另一个模型 DateTimeField,它具有以下字段 datecreated 和 date_modified。

models.py-->

class Room(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='owner', null=True)
    def __str__(self):
        return str(self.user.username)
class MessageModel(DateTimeModel):
    user_name = models.ForeignKey(Room, null=True, blank=True, on_delete=models.SET_NULL)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name = 'sender', on_delete=models.CASCADE, null=True)
    message = models.TextField('body')
    recipients = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='recipients')

    class Meta:
        ordering = ['-id']

forms.py-->

class MessageModelInline(admin.TabularInline):
    model = MessageModel
class RoomAdmin(admin.ModelAdmin):
    inlines = [MessageModelInline]
admin.site.register(Room, RoomAdmin)
@database_sync_to_async
def save_message_to_db(self,username, message):
    user_name = self.user_name
    print(type(user_name))     # <class 'django.contrib.auth.models.User'>

    return MessageModel.objects.create(user_name=user_name, user=username, message=message)

任何解决方案都将受到高度赞赏。谢谢你

【问题讨论】:

  • MessageModel 中的用户名应该是 Room 模型的一个实例
  • MessageModel 中的 user_name 是 Room 模型的 ForeignKey。不是 Room 的实例吗?

标签: python django django-models django-rest-framework django-channels


【解决方案1】:
MessageModel.objects.create(user_name=user_name, user=username, message=message)

上面的那行应该改成下面这行的样子

MessageModel.objects.create(user_name=instance_of_Room, user=username, message=message)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 2018-06-03
    • 1970-01-01
    • 2023-03-27
    • 2020-12-05
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多