【发布时间】:2021-08-25 18:28:57
【问题描述】:
假设我有如下关系:
class Student(AbstractBaseUser):
# It inherits AbstractBaseUser and has it's own manger
# note: I did forget to add editable here
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
firstname
lastname
...
class Teacher(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
firstname
lastname
email
...
class Meeting(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
student = models.ManyToManyField(Student)
teacher = models.ManyToManyField(Teacher)
我应该如何为“学生”或“教师”字段添加/设置值。我尝试将相关模型中的对象分配给它们,但得到一个错误:
禁止直接分配到多对多集合的前端。改用 student.set()。
我也试过这个:
m = Meeting()
s = Student.objects.first() #to get a random student
m.student.add(s)
然后我得到:
ValueError:无法添加“
我也是这样做的:
m = Meeting.objects.create() #It does only have two mentioned fields.
m.student.add(s)
我明白了: django.db.utils.ProgrammingError:列“meeting_id”是 bigint 类型,但表达式是 uuid 类型 第 1 行:..._meeting" ("meeting_id", "student_id") 值 ('c7688df9-... ^ 提示:您需要重写或转换表达式。
【问题讨论】:
-
@AbdulAzizBarkat 我试过这个,但我遇到了一个错误。让我更新主题。谢谢
-
@TheMir:你应该先在数据库端创建
Meeting,所以m = Meeting.objects.create(),或者m.save(),否则它没有pk,你因此无法将学生/教师链接到Meeting。 -
您的一个(或多个)模型是否使用
uuid作为主键而不是AutoField? -
@WillemVanOnsem 是的,我在您的答案下方发表了评论。