Django - 你如何为每个'用户'分配'反馈'到一个'任务'? (多对一)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django - 你如何为每个'用户'分配'反馈'到一个'任务'? (多对一)相关的知识,希望对你有一定的参考价值。
我有三个模型'用户','分配'和'反馈'。我正在尝试设置可由所有用户帐户访问/查看的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字段,但我真的不确定。任何帮助将不胜感激。
我认为你想要将反馈与特定的任务(可能有很多)联系起来,所以你需要在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
。)
以上是关于Django - 你如何为每个'用户'分配'反馈'到一个'任务'? (多对一)的主要内容,如果未能解决你的问题,请参考以下文章
你如何为设备和模拟器编译 PJSip iPhone 以在 iOS 3 和 iOS 4 上使用虹吸管?