Django - 你如何为每个'用户'分配'反馈'到一个'任务'? (多对一)

问题描述 投票:0回答:1

我有三个模型'用户','分配'和'反馈'。我正在尝试设置可由所有用户帐户访问/查看的OneToMany分配,然后可以应用反馈,但只能由OneToOneField用户帐户查看。这里有一些代码可以帮助解释当前正在发生的事情。

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

# Create your models here.
class UserProfile(models.Model):
USER_TYPE_CHOICES = (
    ('Student', 'Student'),
    ('Lecturer', 'Lecturer'),
    ('Admin', 'Admin'),
) 
user = models.OneToOneField(User, on_delete=models.CASCADE)
uni_id = models.IntegerField(default=0)
type_user = models.CharField(max_length=20, 
default='s',choices=USER_TYPE_CHOICES)
description = models.CharField(max_length=100, default='')
city = models.CharField(max_length=100, default='')
website = models.URLField(default='')
phone = models.IntegerField(default=0)
image = models.ImageField(upload_to='profile_image', blank=True)

def __str__(self):
    return self.user.username

def create_profile(sender, **kwargs):
if kwargs['created']:
    user_profile = 
UserProfile.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=User)


# Assignment model
class Assignment(models.Model):
assignment_title = models.CharField(max_length=256)
assignment_id = models.IntegerField(default=0)
user = models.ManyToOneField(User, on_delete=models.CASCADE)

# Feedback model
class Feedback(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)

我想到可能是一个外键将分配连接到反馈模型中的OneToOne字段,但我真的不确定。任何帮助将不胜感激。

django django-models
1个回答
0
投票

我认为你想要将反馈与特定的任务(可能有很多)联系起来,所以你需要在Feedback模型中使用一个赋值外键。此外,您需要将User作为外键而不是一对一的关系,因为这会限制您为每个用户提供一个反馈。

class Feedback(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)

如果用户每次分配只能获得一个反馈,请在Feedback模型中指定:

    class Meta:
        unique_together = ('assignment', 'user')

使用实际反馈(等级,注释等)扩展Feedback模型,并可能为反馈的发起者提供字段。

然后,您可以创建仅显示request.user反馈的视图。 Django tutorial提供了相当多的观点,many other helpful resources也是如此。

Assignment,作为一项任务可以给予多个学生,学生将在学习过程中获得多项任务,你需要与User有多对多的关系:

users = ManyToManyField(User)

(没有ManyToOneField顺便说一句,这将是一个ForeignKey。)

© www.soinside.com 2019 - 2024. All rights reserved.