我正在尝试创建以下模型。通过EntryLike
中间模型,存在Entry
到{
class BaseType(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
creation_time = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Title(BaseType):
text = models.CharField(max_length=100)
description = models.TextField()
class EntryLike(BaseType):
entry = models.ForeignKey(Entry)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
class Entry(BaseType):
title = models.ForeignKey(Title, on_delete=models.PROTECT)
text = models.TextField()
user = models.ForeignKey(settings.AUTH_USER_MODEL)
liked_by_users = models.ManyToManyField(settings.AUTH_USER_MODEL, through='EntryLike', through_fields=('entry', 'user'))
在上面的模型方案上运行迁移会抛出错误:AttributeError:'str' object has no attribute 'meta'
。在
如果您能帮助解决这个错误,我们将不胜感激。我不熟悉Django&Python,但不熟悉Web开发。在
问题是settings.AUTH_用户模型几乎肯定不是一个模型实例。它可能是一个字符串,它约束了另一个模型可以做出的选择—设置是离开模型定义的一个奇怪的地方。在
要在用户模型和上述字段之间执行MTM,您需要执行以下操作:
我添加了str函数,这样当您在admin/shell中操作它时,它会给出更合理的返回。在
我还想问您是否需要第二组字段(此处已删除),因为您可以在Entry和EntryLike join表之间使用select related,而不必重复字段—您可以这样做,只是有点不必要。在
最后,我要注意的是,我上面使用它的方式只是使用Django-you may wish to customise it.附带的默认用户对象,或者像您在这里用自己的模型基类来扩展基类。在
(所有这些都是基于AUTH_USER_MODEL不是一个模型实例-如果是的话,您可以从设置.py?) 在
相关问题 更多 >
编程相关推荐