繁体   English   中英

django视图创建模型对象

[英]django view create model object

我的网站使用了评分功能,用户可以创建一个新类别的请求,此后至少有100个用户必须对此请求进行评分,如果100/100个用户对该请求的评分为positiv,则应该创建该类别,但我不知道评级达到100/100肯定票后如何创建类别模型实例。

views.py

def category_request_up_vote (request, pk):
    category_request = get_object_or_404(CategoryRequests, pk=pk)
    try:
        if request.method == 'GET':
            if category_request.author == request.user:
                messages.error(request, 'You are trying to vote a request you created by your own. Thats not possible (Transmision ignored).')
                return redirect('category_request_detail', pk=category_request.pk)
            if CategoryRequests_Vote.objects.filter(voter=request.user, voted=category_request).exists():
                messages.error(request, 'You already Voted this request. Double votes are not allowed (Transmision ignored).')
                return redirect('category_request_detail', pk=category_request.pk)
            else:
                if category_request.up_vote == 100:
                    print("So what should i do now?")
                else:
                    category_request.up_vote = F('up_vote') + 1
                    category_request.save()
                    CategoryRequests_Vote.objects.create(voter=request.user, voted=category_request)
                    messages.success(request, 'You have successfully Provided an Up-Vote for this Request.')
                    return redirect('category_request_detail', pk=category_request.pk)
        else:
            messages.error(request, 'Uuups, something went wrong, please try again.')
            return redirect('category_request_detail', pk=category_request.pk)
    except:
        messages.error(request, 'Uuups, something went wrong, please try again.')
        return redirect('category_request_detail', pk=category_request.pk)

models.py

class Category(models.Model):
    title = models.CharField(max_length=30, verbose_name="Title")
    description = models.TextField(max_length=200, null=True, blank=False)
    cover = fields.ImageField(blank=False,
                              null=False,
                              upload_to=get_file_path_static_glued,
                              validators=[default_image_size, file_extension_category_cover],
                              dependencies=[FileDependency(
                                  processor=ImageProcessor(format='PNG', quality=99, scale={
                                      'max_width': 700, 'max_height': 700}))])

    class Meta:
        verbose_name = "Category"
        verbose_name_plural = "Categories"
        ordering = ['title']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.post = None
        self.post_sell_multiple = None


    def __str__(self):
        return self.title

    @classmethod
    def get_indexable(cls):
        return cls.objects.all()

    @classmethod
    def configure_mapping(cls, mapping):
        # mapping is an elasticsearch_dsl Mapping object
        mapping.field('title', 'string')
        return mapping


class CategoryRequests(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=20, verbose_name="Title")
    description = models.TextField(max_length=200, null=True, blank=True)
    cover = fields.ImageField(
                              null=True,
                              blank=True,
                              upload_to=get_file_path_user_uploads,
                              validators=[default_image_size, default_image_file_extension],
                              dependencies=[FileDependency(processor=ImageProcessor(
                                  format='PNG', quality=99, scale={'max_width': 700, 'max_height': 700}))])
    published_date = models.DateField(auto_now_add=True, null=True)
    status = StatusField(default='Waiting')
    STATUS = Choices('Waiting', 'Rejected', 'Accepted')
    up_vote = models.IntegerField(default=0)
    down_vote = models.IntegerField(default=0)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    class Meta:
        verbose_name = "Category Request"
        verbose_name_plural = "Category Request(s)"
        ordering = ['title']

    def __str__(self):
        return self.title

CategoryRequest模型具有Category模型所需的字段,例如标题,描述等。

为此,请在if category_request.up_vote == 100:内使用简单的Django ORM if category_request.up_vote == 100:您可以编写,

category=Category.objects.create(title=category_request.title,description=category_request.description)

在下一行category.save()添加Category模型需要的其他字段。 因此,现在创建了类别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM