首页 > 解决方案 > Django使用外键将数据添加到数据库表中

问题描述

我有一个带有标准 Django 用户数据库外键的模型。

models.py

class Links(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
        full_link = models.CharField('Полные ссылки пользователя', max_length=100)
        short_link = models.CharField('Короткие ссылки пользователя', max_length=100)
    
        class Meta:
            verbose_name = 'Ccылка'
            verbose_name_plural = 'Ссылки'
        
        def __str__(self):
            return self.full_link

有我的 forms.py 和 views.py

forms.py

class AddLink(forms.ModelForm):
    full_link = forms.CharField(required=True)
    short_link = forms.CharField(required=True)

    class Meta:
        model = Links
        fields = ['full_link', 'short_link']

views.py

def link(request):
if request.method == "POST":
    addUserLink = AddLink(request.POST)
    if addUserLink.is_valid():
        addUserLink.user = request.user
        addUserLink.save()
        messages.success(request, f'Ссылка добавлена')
else:
    addUserLink = AddLink()
    
        return render(request, 'users/links.html', {'userLinks': userLinks, 'title':'Пользовательские ссылки', 'addUserLink': addUserLink})

我想在数据库中的 Link 表中添加一条记录。授权用户在表单中输入值,我有一个错误NOT NULL constraint failed: users_links.user_id。我认为当我尝试提交表单时,它不会发送 user_id。为什么?

标签: djangodatabasedjango-modelsdjango-forms

解决方案


您没有user在表单中指定字段。因此,要么添加null=Trueuser模型中的字段,要么将用户字段添加到表单,如下所示:

class AddLink(forms.ModelForm):
   
    class Meta:
        model = Links
        fields = ['full_link', 'short_link', 'user']

推荐阅读