【问题标题】:How to connect django model using foreignkey to a unique object in another model如何使用外键将 django 模型连接到另一个模型中的唯一对象
【发布时间】:2021-01-26 17:08:14
【问题描述】:

请问如何使用 onetoonefield 或外键将模型连接到另一个模型中的特定对象。

例子

class Post(models.Model):
    title = models.TextField(max_length=100, null=True)
    caption = models.CharField(max_length=1000)
    photo = models.ImageField(upload_to ='posts', null=True)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    likes= models.IntegerField(default=0)
    dislikes= models.IntegerField(default=0)
    price = models.DecimalField(max_digits=10, decimal_places=2, null=True)
    digital = models.BooleanField(default=False, null=True, blank=False)
    location = models.PointField(srid=4326, null=True)
    category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.CASCADE)
    slug = models.SlugField(unique=True, null=True)

    def __str__(self):
        return self.title

    @property
    def number_of_comments(self):
        return Comment.objects.filter(post_connected=self).count()


class Comment(models.Model):
    **post_owner = models.OneToOneField(      )** 
    content = models.TextField(max_length=150)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    post_connected = models.ForeignKey(Post, on_delete=models.CASCADE)

我需要在评论模型中创建 post_owner,在帖子模型中连接到 author不是整个帖子模型

【问题讨论】:

  • 为什么不将OneToOneField 改为User 而不是Post
  • 因为如果我这样做,它会选择 cmets 的用户而不是拥有帖子的用户.... 请参阅评论模型中的 Author 对用户。你明白吗?
  • 当您与一个模型有多个关系时,您需要将related_name 参数传递给关系。见stackoverflow.com/questions/543377/…

标签: django django-models model foreign-keys one-to-one


【解决方案1】:

假设您有一个评论对象,您可以使用类似这样的方式访问其所有者。

comment = Comment.objects.first()
owner = comment.post_connected.author

【讨论】:

  • 好的。我想我明白你在说什么。让我试试看。
猜你喜欢
  • 2017-08-30
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2014-09-05
相关资源
最近更新 更多