首页 > 解决方案 > 如何在 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)`

标签: django

解决方案


我无法破译你在那里做什么,但是:

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:

推荐阅读