如何在django中创建查询

ryoqjall  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(98)

我有一个Django模型,它包括两个相关的模型:“RunningTasks”和“PointsforUser”。我正在尝试为用户创建一个新任务,并将该任务的积分值设置为等于用户当前的积分余额。但是,我不确定如何使用给定的模型来实现这一点。
下面是相关代码:

class PointsforUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    points = models.IntegerField(null=True, default=0)
    slug = models.SlugField(max_length=255, blank=True, unique=True)

class RunningTasks(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    fixed = models.BooleanField(default=False)
    slug = models.SlugField(verbose_name='URL', max_length=255, blank=True, unique=True)
    task = models.ForeignKey(Task, on_delete=models.CASCADE)
    points = models.IntegerField(null=True, default=0)

class TaskCreateForm(forms.ModelForm):
    class Meta:
        model = RunningTasks
        fields = ('task',)

class RunTaskCreateUserView(LoginRequiredMixin,CreateView):    
    model = RunningTasks
    template_name = 'usersboard/tasks_create.html'
    form_class = TaskCreateForm       
   
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

class Task(models.Model):
    slug = models.SlugField(verbose_name='URL', max_length=255, blank=True, unique=True)
    name = models.CharField(max_length=70, blank=True, unique=True, default='')
    description = models.TextField( max_length=500)
    theme = TreeForeignKey('Theme', on_delete=models.PROTECT, related_name='tasks', null=True)
    url = models.CharField( max_length=70, blank=True, null=True, default=10)
    status = models.CharField(choices=STATUS_OPTIONS, default='in job', verbose_name='Статус', max_length=10)
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)
    points = models.CharField( null=True, default=1)
    fixed = models.BooleanField( default=False)

如何将用户的积分值设置为任务的默认积分值?
我创造

task = Task.objects.filter(points__lt=PointsforUser.objects.filter(points=F("points")))

但我得到了这个错误:
返回的多个对象:get()返回多个PointsforUser
它返回了2个对象。如何在查询中发送id授权用户?

fcipmucu

fcipmucu1#

根据你的解释,你似乎在寻找这样的东西:

class Task(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE) # add relation to user
    slug = models.SlugField(verbose_name='URL', max_length=255, blank=True, unique=True)
    name = models.CharField(max_length=70, blank=True, unique=True, default='')
    description = models.TextField( max_length=500)
    theme = TreeForeignKey('Theme', on_delete=models.PROTECT, related_name='tasks', null=True)
    url = models.CharField( max_length=70, blank=True, null=True, default=10)
    status = models.CharField(choices=STATUS_OPTIONS, default='in job', verbose_name='Статус', max_length=10)
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)
    points = models.CharField( null=True, default=1)
    fixed = models.BooleanField( default=False)
    
    # set PointsforUser.points as default value of Task.points
    def save(self, *args, **kwargs):
        points_for_user = PointsforUser.objects.get(user=self.user)
        self.points = points_for_user.points
        super(Task, self).save(*args, **kwargs)

相关问题