【问题标题】:Django On-Insert triggerDjango On-Insert 触发器
【发布时间】:2021-05-06 14:03:36
【问题描述】:

我在 Django 中有一个模型,我希望在另一个模型插入对象后自动填充值。 这是发起者模型问题

class Question(models.Model):
question = models.CharField(max_length=200, null=False, blank=False)
description = models.TextField('description', default=False)
voters = models.ManyToManyField(User, related_name='+')
votes = models.IntegerField(default = 0)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)

问题视图:

class QuestionApiView(AuthenticatedAPIView):
"""
Lists all questions or creates a new question
"""

def post(self, request, format=None):

    vote_data = request.data
    vote_data["created_by"] = request.user.id

    data["created_by"]=request.user.id

    print(vote_data)
    print(vote_data["voters"])
    voter_data = vote_data["voters"]

    result, valid = QuestionHelper.createQuestion(vote_data)

问题助手:

class QuestionHelper(object):
@classmethod
def createQuestion(klass, questiondata):
    """
    creates a question
    """
    createdQuestion = QuestionSerializer(data=questiondata)
    if createdQuestion.is_valid():
        createdQuestion.save()
        return createdQuestion.data, True
    return createdQuestion.errors, False

问题序列化器:

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = '__all__'

这是我的 Choice 模型,我希望将值 YesNoAbstain 添加到 >choice_text 一旦创建了 Question 对象:

question = models.ForeignKey(Question, on_delete=models.CASCADE, default=1)
choice_text = models.CharField("choice", max_length=250)

这样,每个选项都将使用 question_id 链接到一个问题

【问题讨论】:

  • 呃,我不明白,也许你想在choice_text 字段中使用choices 关键字?
  • 我不想在choice_text 列下插入默认值

标签: python django django-models django-rest-framework django-views


【解决方案1】:

这是一个使用选项的示例:

models.py

YES = 0
NO = 1
ABSTAIN = 2

CHOICE_OPTIONS = (
    (YES, 'yes'),
    (NO, 'no'),
    (ABSTAIN, 'abstain'),
)

class Question(models.Model):
    choice = models.PositiveIntegerField(..., choices = CHOICE_OPTIONS)

views.py

from . import models

# update a choice instance:
question = models.Question.objects.get(id='<the id>')
question.choice = models.YES
question.save()

【讨论】:

  • 你好。回复较晚,抱歉。让我试一试并恢复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2020-11-19
  • 2023-03-18
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
相关资源
最近更新 更多