连接两个Django模型



我正试图为一个项目创建一个拍卖网站,但我无法连接两个模型,我的models.py文件中有一个模型,用于拍卖列表(Alisting(和一个用于出价(Bid(。

-Alisting模型有4个字段:用于拍卖标题的titleCharField、用于起始出价的sta_bid、用于Bid模型的las_bidForeignKey和用于User模型的userForeignKey。

-投标模型有3个字段:投标用户的userForeignKey到UserlistingForeignKey和Alisting,以及最近投标的new_bidIntegerField。

class User(AbstractUser):
pass
class Alisting(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=32)
sta_bid = models.IntegerField()
las_bid = models.ForeignKey(Bid, on_delete=models.CASCADE)
class Bid(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
listing = models.ForeignKey(Alisting, on_delete=models.CASCADE)
new_bid = models.IntegerField()

我如何连接这两个模型,这样当我创建一个列表时,我可以从另一个模型创建对该列表的新出价。因为在项目的后期,我必须允许用户修改其他用户列表中的出价。

提前谢谢!

我建议你这样设计:

class User(AbstractUser):
pass
class Alisting(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=32)
sta_bid = models.IntegerField()

@property
def last_bid(self):
# You don' t need to update last_bid, since is obtained dynamically with this property
if self.bid_set.objects.count() > 0:
return self.bid_set.order('-creation_date')[0]
return None
class Bid(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
listing = models.ForeignKey(Alisting, on_delete=models.CASCADE)
new_bid = models.IntegerField()
creation_date = models.DateTimeField(auto_now_add=True)  # Stores the date when the bid was created

您可以访问最后一次出价:

listing = Alisting.objects.all()[0]
print(listing.last_bid)

您可以访问一个列表的出价:

listing = Alisting.objects.all()[0]
listings.bid_set.objects.all()
# Or to get only bids of a given user
listings.bid_set.objects.filter(user=User.objects.all()[0])

您可以访问用户的出价:

user = User.objects.all()[0]
user.bid_set.objects.all()
# Or to get only bids of an user with a given listing
user.bid_set.objects.filter(listing=Alisting.objects.all()[0])

您可以使用访问给定用户创建的列表

user = User.objects.all()[0]
user.alisting_set.objects.all()

最新更新