我有三个模型:“用户”,“分配”和“反馈”。我试图设置一个可以由所有用户帐户访问/查看的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字段,但是我不确定。任何帮助将不胜感激。
答案 0 :(得分: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
。)