我可以将 2 个条目保存到相互引用的模型中吗?
Can I save 2 entries to my models that are referencing each other?
我有 2 个模型,“Listing”和“Bid”
出价:
# bids and bidder
class Bid(models.Model):
bid = models.IntegerField(default=10) #default soll durch user gesetzt werden
# Foreign Keys
bidder = models.ForeignKey(User, on_delete=models.CASCADE, related_name="bids")
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name="bids")
清单:
# all information related to a listing
class Listing(models.Model):
creation_date = models.DateTimeField(auto_now_add=True, null=True)
title = models.CharField(max_length=100, null=True)
description = models.CharField(max_length=100)
image = models.URLField(max_length=200, default="https://user-images.githubusercontent.com/24848110/33519396-7e56363c-d79d-11e7-969b-09782f5ccbab.png")
bid = models.IntegerField(default=10)
auction_open = models.BooleanField(default=True)
# Foreign Keys
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listings")
place_bid():
def place_bid(request, listing_id):
bidder = request.user
bid = request.POST.get("bid")
listing_entry = Listing.objects.get(pk=listing_id)
bid_entry = Bid(listing=listing_entry, bid=bid, bidder=bidder)
bid_entry.save()
listing_entry.bid = bid_entry
listing_entry.save()
return;
在函数“place_bid()”中,我想创建一个新的“Bid”实例,它使用外键引用一个已经存在的“Listing”实例。
问题出现是因为我接下来要做什么:我想更改刚刚引用的同一个“Listing”实例,我想将该 Listing 对象的“Bid”对象替换为我刚才的“Bid”对象已创建。
你能帮帮我吗:)
首先,根据您的描述,我了解到每个Bid都有一个listing,但每个listing只有1个Bid。如果是这种情况,我建议将字段的定义切换为 OneToOneField 而不是 ForiegnKey。
def place_bid(request, listing_id):
bidder = request.user
bid = request.POST.get("bid")
listing_entry = Listing.objects.get(pk=listing_id)
# Here there is a small problem with your current models setup because each listing
# can have several Bids. Here is a small patch for now. But I recommend that you change that to:
# listing_entry.bid if you do chose to use OneToOneField there instead
bid = listing_entry.bids.first()
bid.update(listing=listing_entry, bid=bid, bidder=bidder)
bid.save()
return # no need for that: ;
我有 2 个模型,“Listing”和“Bid”
出价:
# bids and bidder
class Bid(models.Model):
bid = models.IntegerField(default=10) #default soll durch user gesetzt werden
# Foreign Keys
bidder = models.ForeignKey(User, on_delete=models.CASCADE, related_name="bids")
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name="bids")
清单:
# all information related to a listing
class Listing(models.Model):
creation_date = models.DateTimeField(auto_now_add=True, null=True)
title = models.CharField(max_length=100, null=True)
description = models.CharField(max_length=100)
image = models.URLField(max_length=200, default="https://user-images.githubusercontent.com/24848110/33519396-7e56363c-d79d-11e7-969b-09782f5ccbab.png")
bid = models.IntegerField(default=10)
auction_open = models.BooleanField(default=True)
# Foreign Keys
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listings")
place_bid():
def place_bid(request, listing_id):
bidder = request.user
bid = request.POST.get("bid")
listing_entry = Listing.objects.get(pk=listing_id)
bid_entry = Bid(listing=listing_entry, bid=bid, bidder=bidder)
bid_entry.save()
listing_entry.bid = bid_entry
listing_entry.save()
return;
在函数“place_bid()”中,我想创建一个新的“Bid”实例,它使用外键引用一个已经存在的“Listing”实例。
问题出现是因为我接下来要做什么:我想更改刚刚引用的同一个“Listing”实例,我想将该 Listing 对象的“Bid”对象替换为我刚才的“Bid”对象已创建。
你能帮帮我吗:)
首先,根据您的描述,我了解到每个Bid都有一个listing,但每个listing只有1个Bid。如果是这种情况,我建议将字段的定义切换为 OneToOneField 而不是 ForiegnKey。
def place_bid(request, listing_id):
bidder = request.user
bid = request.POST.get("bid")
listing_entry = Listing.objects.get(pk=listing_id)
# Here there is a small problem with your current models setup because each listing
# can have several Bids. Here is a small patch for now. But I recommend that you change that to:
# listing_entry.bid if you do chose to use OneToOneField there instead
bid = listing_entry.bids.first()
bid.update(listing=listing_entry, bid=bid, bidder=bidder)
bid.save()
return # no need for that: ;