【问题标题】:how to stop create view if already created django如果已经创建了 django,如何停止创建视图
【发布时间】:2021-07-05 23:44:29
【问题描述】:

请帮助我在 django 项目中制作这个应用程序

这是models.py文件代码

from django.db import models
from bio.models import Profile

class Question(models.Model):
   name = models.TextField(max_length=500)

   def __str__(self):
     return self.name

class Answer(models.Model):
  question = models.ForeignKey(Question, related_name='question', on_delete=models.CASCADE)
  profile = models.ForeignKey(Profile, related_name='profile', on_delete=models.CASCADE)
  text = models.TextField(max_length=400)
  created_on = models.DateTimeField(auto_now_add=True,null=True)

  def __str__(self):
    return "{0} on {1}".format(self.question, self.profile)
  
  class Meta:
    db_table = 'answer'
    constraints = [
        models.UniqueConstraint(fields=['profile', 'text', 'question'], name='unique answer')
    ]

  

这里是views.py文件代码

class DetailViewMixin(object):
  details_model = None
  context_detail_object_name = None

  def get_context_data(self, **kwargs):
    context = super(DetailViewMixin, self).get_context_data(**kwargs)
    context[self.context_detail_object_name] = self.get_detail_object()
    return context

  def get_detail_object(self):
    return self.details_model._default_manager.get(pk=self.kwargs['pk'])


class AnswerCreate(DetailViewMixin, CreateView):
  details_model = Question
  context_detail_object_name = 'question'
  model = Answer
  form_class = NewAnswerForm
  template_name = "qna/answer.html"
  success_url = reverse_lazy('qna:list')

  def form_valid(self, form):
    form.instance.profile_id = self.kwargs.get('pk')
    form.instance.question_id = self.kwargs.get('pk')
    return super().form_valid(form)

这是我的 forms.py 代码

from django import forms
from .models import Answer

class NewAnswerForm(forms.ModelForm):
  class Meta:
    model = Answer
    fields = ['text',]

  def clean(self):
    try:
        Answer.objects.get(text=self.cleaned_data['text'].lower())
        raise forms.ValidationError('Answer exists!')
    except Answer.DoesNotExist:
        pass

    return self.cleaned_data

我哪里错了????

我希望如果用户回答了一个问题,那么他就无法再次回答了

如果对象已经创建,我如何进行表单验证

【问题讨论】:

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


    【解决方案1】:

    添加 UniqueConstraint 到 Answer 以便不能重复 Question 和 Profile 的组合: https://docs.djangoproject.com/en/3.1/ref/models/constraints/#django.db.models.UniqueConstraint

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2013-07-03
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      相关资源
      最近更新 更多