我是Django的新手所以我制作了3个简单的表来返回一个愿望清单。问题是我希望每当用户请求WishList时,他/她的user_id
用于进行SELECT
查询以返回他/她自己的愿望清单。我想从我的愿望清单表中获取产品名称和产品网址。我使用to_field
,但这样我才能获得产品名称。我不太了解Django所以请帮助我!
class Product(models.Model):
class Meta:
unique_together = (('id', 'title'),)
title = models.CharField(max_length=200, unique=True,
help_text='Name of the product')
url = models.CharField(max_length=300, default='',
help_text='Url of the product')
def __str__(self):
return 'Product: {}'.format(self.title)
class WishList(models.Model):
class Meta:
unique_together = (('user', 'product'),)
user = models.ForeignKey(fbuser,
on_delete=models.CASCADE,
help_text='Facebook user',
to_field='user_id')
product = models.ForeignKey(Product, to_field='title', db_column='title',
on_delete=models.CASCADE)
def __str__(self):
return 'WishList: {}'.format(self.user)
答案 0 :(得分:1)
Django文档是你的朋友,read it。
我很认真,请阅读整个documentation。
此外,将to_field覆盖到与您的model.pk不同的另一个字段并不是一个好的做法,除非你有一个非常好的理由而且你知道你在做什么(现在绝对不是这样)。
因此,在您阅读完文档后,您将知道为了获得与用户相关的愿望,您可以使用ForeignKey
反向关系获取用户的所有相关愿望清单。
user_wishlists = my_user.wishlist_set.all()
#Because we know that you want to access the wishlist.products
#in order to optimize things (in terms of db queries)
#you can add and .select_related('product')
#e.g, user_wishlists = my_user.wishlist_set.all().select_related('product')
#now follow the wishlist.product foreign key to access the related product for every wishlist
for wishlist in user_wishlists:
product = wishlist.product
print (product.id, product.title, product.url)
现在,在您阅读了更多文档之后
您会注意到WishList
模型实际上是intermediate model ManyToMany
User
与他希望的产品之间的关系,然后您就会知道您可以定义一个M2M字段通过WishList
之间的用户和产品之间如下:
class FbUser(models.Model):
#...
wished_products = models.ManyToManyField(
Product,
through='WishList',
through_fields=('user', 'product')
)
#and now accessing user wished products would be easy as:
user_wished_products = my_user.wished_products.all()
for product in user_wished_products:
print (product.id, product.title, product.url)