簡體   English   中英

Django模型和視圖

[英]Django models and views

我正在嘗試創建我的第一個項目。 像堆棧溢出問題和特定主題的答案。 我通過AbstractBaseUser創建自己的用戶。 現在,我想創建問答模型。

我的模特:

class Question(models.Model):

text = models.TextField()
title = models.CharField(max_length=200)
date = models.DateTimeField(default=datetime.datetime.now)
author = models.ForeignKey(CustomUser)
def __str__(self):
    return self.title

類Answer(models.Model):

text = models.TextField()
date = models.DateTimeField(default=datetime.datetime.now)
likes = models.IntegerField(default=0)
author = models.ForeignKey(CustomUser)
question = models.ForeignKey(Question)

類標簽(models.Model):

TYPE_OF_TAGS = (
    ('First tag', 'First'),
    ('Second tag', 'Second'),
    ('Third tag', 'Third'),
    )
type_of_tag = models.CharField(max_length=12, choices=TYPE_OF_TAGS, blank=True)
question = models.ManyToManyField(Question)

我的看法:

def question(request):

args = {}
args.update(csrf(request))
args['form'] = QuestionForm()
args['profile'] = CustomUser.objects.filter(pk = request.user.pk)
args['author'] = Question()

if request.POST:
    args['form'] = QuestionForm(request.POST)
    obj = args['form'].save(commit=False)
    obj.save()
    args['author'].author = args['profile']
    args['author'].save()
    return redirect(reverse(question))

return render(request, 'questions.html', args)

我創建了答案的第一個視圖,並且在發送表單時出現錯誤:

列“ author_id”中的空值違反了非空約束

我想我走錯了方向。 我的模型和觀點都不好。 為什么會有這個錯誤,我的模型有什么問題?

如果您的業務規則不允許一個問題的作者為空,則必須在保存之前將作者值設置為obj。 就像是:

def question(request):

    args = {}
    args.update(csrf(request))
    args['form'] = QuestionForm()
    args['profile'] = CustomUser.objects.filter(pk = request.user.pk)

    if request.POST:
        args['form'] = QuestionForm(request.POST)
        obj = args['form'].save(commit=False)
        obj.author = args['profile']
        obj.save()
        return redirect('your_redirect_url')

    return render(request, 'questions.html', args)

您還有另一個選擇:您可以將以下內容的初始字典傳遞給QuestionForm:

{
    'author' : CustomUser.objects.filter(pk = request.user.pk)
}

就像是:

def question(request):

    args = {}
    args.update(csrf(request))
    args['form'] = QuestionForm(initial={
        'author': CustomUser.objects.filter(pk = request.user.pk)    
    })

    if request.POST:
        args['form'] = QuestionForm(request.POST)
        obj = args['form'].save()
        return redirect('your_redirect_url')

    return render(request, 'questions.html', args)

注意:重要的是在您的questions.html模板中呈現作者值的隱藏字段,因此它包含在POST數據中。

對於外鍵字段使用null = True ,可以為null。

class Question(models.Model):

    #...
    author = models.ForeignKey(CustomUser, null = True, blank = True)

否則,首先將模型保存時要指定author的值,這是錯誤的做法。 我無法理解args['author'] = Question()是什么意思? 你應該做一些事情

args['author'] = CustomUser() # in your question view

代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM