IntegrityError:关系“ message”的列“ category_id”中的空值违反了非空约束详细信息:失败行包含

朱旺

我认为此错误来自我可能写错了的这一行。任何人都可以分享为什么在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)


阿卜杜勒·阿齐兹·巴尔卡特|

您假设正确。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()

另外为什么外键categoricalrelated_name是相同的,即categorical相关对象使用相关名称,即category_instance.categorical没什么意义(而category_instance.rooms则更有意义)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档