【问题标题】:IntegrityError: null value in column "category_id" of relation "message" violates not-null constraint DETAIL: Failing row containsIntegrityError:关系“消息”的列“category_id”中的空值违反非空约束细节:失败行包含
【发布时间】:2021-02-07 07:52:29
【问题描述】:

我相信这个错误来自我可能写错的这一行。任何人都可以分享为什么在views.py中写错了?我知道我必须指定此字段,因为它是模型类别的外键:

message.category_id = self.categories.id

views.py

class AddMessageView(DetailView, FormView):
    model = Room 
    form_class = MessageForm
    template_name = 'add_message.html'

    def get_object(self, queryset=None): 
        return get_object_or_404(Room, type1__slug=self.kwargs['type1_slug'],slug=self.kwargs['room_slug'])
    
    def form_valid(self, form):
        message = form.save(commit=False)
        message.category_id = self.categories.id
        message.name = self.request.user
        message.room = self.get_object()
        message.save()

models.py

class Category(models.Model):
    categories = models.CharField(max_length=80, null=False, blank=False, unique=True)
    slug = models.SlugField(blank=True, unique=True)

class Room(models.Model):
    categorical = models.ForeignKey(Category, related_name='categorical', on_delete=models.CASCADE)
    slug = models.SlugField(blank=True)

class Message(models.Model):
   category = models.ForeignKey(Category, related_name='category', on_delete=models.CASCADE)
   room = models.ForeignKey(Room, related_name='messages', on_delete=models.CASCADE)
   name = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='naming', on_delete=models.CASCADE)


【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    你猜对了。 self.categories 这个属性categories 来自哪里?我假设消息的类别与房间的类别相同,但是为什么要存储消息的类别呢? (无论如何,您都可以从房间中获取它,即您最终拥有重复的数据)无论如何,如果您希望类别与房间类别相同:

    def form_valid(self, form):
        room = self.get_object()
        message = form.save(commit=False)
        message.category = room.categorical
        message.name = self.request.user
        message.room = room
        message.save()
    

    为什么外键categorical 的related_name 相同,即categoricalrelated 对象使用相关名称,即 category_instance.categorical 没有多大意义(而 category_instance.rooms 更有意义)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 2023-03-13
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 2017-12-16
      • 1970-01-01
      相关资源
      最近更新 更多