django - 如何在 Django 中从模型 B 的 2 个随机对象中创建模型 A 的对象?
问题描述
我正在尝试创建一个在 Django 中满足两个随机用户的应用程序。我的问题是如何从我的用户模型中从 2 个随机用户中创建一个对象会议,我想要一个类似于 for 循环的东西,以便我的数据库中的每 2 个用户都有一个会议!
ps:我只剩下一天提交我的工作,如果你能帮助我,我将非常感激
这是我到目前为止的代码:
def createMeeting():
user_p = get_user_model()
users = user_p.objects.all()
all_users = users.exclude(username="Admin")
n = all_users.count()
for k in range(math.floor(n/2)):
for user in all_users:
freedate = FreeDate.objects.filter(user=user)
starreds = user.userprofile.desired_user.all()
matched_user = User
if freedate:
if starreds:
for u in starreds:
u_freedate = FreeDate.objects.filter(user=u.user)
for dates in freedate:
for matchdates in u_freedate:
if dates.FreeTime == matchdates.FreeTime and dates.FreeDay == matchdates.FreeDay:
matched_user = u.user
else:
for u in users:
u_freedate = FreeDate.objects.filter(user = u)
for dates in freedate:
for matchdates in u_freedate:
if dates.FreeTime == matchdates.FreeTime and dates.FreeDay == matchdates.FreeDay:
matched_user = u
if matched_user and matched_user != user and not(Meeting.objects.filter(user1=user, user2=matched_user) | Meeting.objects.filter(user1=matched_user, user2=user)):
Meeting.objects.create(user1=user, user2=matched_user)`
它只创建一个会议对象,我收到此错误:
TypeError: Field 'id' expected a number but got <class 'django.contrib.auth.models.User'>.
这是我的 models.py:
class UserProfile(models.Model):
GENDER=(
('Female','Female'),
('Male','Male'),
('Others', 'Others'),
)
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
birthdate = models.DateTimeField(default=timezone.now, null=True)
phone = models.CharField(max_length=200, null=True)
age = models.IntegerField(null=True, default=18)
years_of_experience = models.IntegerField(null=True, default=5)
job_title = models.CharField(max_length=200, null=True)
gender = models.CharField(max_length=200, null=True, choices=GENDER)
profile_image = models.ImageField(null=True, blank=True)
about = models.TextField(null=True)
desired_user = models.ManyToManyField("self")
skill = models.ManyToManyField("Skill")
`class Meeting(models.Model):
STATE_CHOICES = [
('Accepte', 'Accepte'),
('Deny', 'Deny'),
]
RATE_MEETING = [
(1, '1'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5'),
]
user1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user1', null=True)
user2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user2', null=True)
state1 = models.CharField(max_length=200, null=True, choices=STATE_CHOICES)
state2 = models.CharField(max_length=200, null=True, choices=STATE_CHOICES)
text1 = models.TextField(max_length=3000, null=True, blank=True)
text2 = models.TextField(max_length=3000, null=True, blank=True)
rate1 = models.PositiveSmallIntegerField(choices=RATE_MEETING, null=True, blank=True)
rate2 = models.PositiveSmallIntegerField(choices=RATE_MEETING, null=True, blank=True)
meeeting_place = models.ForeignKey(MeetingPlace, on_delete=models.CASCADE, null=True)`
解决方案
我无法破译你在那里做什么,但是:
for k in range(math.floor(n/2)):
for user in all_users:
freedate = FreeDate.objects.filter(user=user)
starreds = user.userprofile.desired_user.all()
matched_user = User # this is the line that's causing the error. Need an User instance, not the User class.
if freedate:
推荐阅读
- python - 编写一个与 wpa_supplicant 交互的外部程序
- azure - 以编程方式将现有共享步骤与测试用例相关联
- java - AWS Lambda 上传文件损坏
- silverstripe - 如何从 Silverstripe API 检索成员列表
- bash - 如何将环境变量从 WSL 传递到 Windows 可执行文件
- windows - 在 cmd 中调用 dir 会打印出:“驱动器 C 中的卷没有标签。”
- vba - 数据表视图中的 MS Access 表单交叉表查询
- azure-devops - 多阶段 YAML Azure 管道变量范围
- filesystems - 是否可以从 Service Worker 使用 webkitRequestFileSystem?
- matlab - 为什么我的 GUI 中的 uitable 元素偶尔会在 MATLAB 中丢失?