Ich habe ein Django-Projekt erstellt, in dem Typ-1-Benutzer einen Post erstellen können und Typ-1-Benutzer einen Post anbieten können. Schließlich findet eine Auktion statt und ein Post-Besitzer kann ein Gebot annehmen. Nach diesem ganzen Prozess wollte ich die Post-Instanz aus der Datenbank entfernen, damit sie nicht in post_queryset erscheint. Dazu habe ich versucht, ein Signal zu verwenden, das nach einer Auktion empfangen wurde und ich habe es vor dem Löschen einer Instanz aus Post-Modell behalten. Aber das funktioniert nicht. Gibt es einen Ansatz, um dieses Problem zu lösen? Ich würde mich freuen, mir dabei helfen zu können.Python/Django: Wie lösche ich eine Instanz automatisch nach einer Aktion?
Hier ist mein Code:
Models.py:
class Post(models.Model):
item = models.CharField(max_length=20)
post_owner = models.OneToOneField(settings.AUTH_USER_MODEL, default=1)
date = models.DateField()
accepted = models.BooleanField(default = False)
objects = PostQuerySet.as_manager()
class Bid(models.Model):
post = models.ForeignKey(Post, related_name = bids)
amount = models.IntegerField(max_length = 20)
bidder = models.ForeingKey(settings.AUTH_USER_MODEL)
class Auction(models.Model):
post = models.OneToOneField(Post)
post_owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
bid = models.OneToOneField('truck.Bid', related_name='auctions')
class PostQuerySet(models.QuerySet):
@receiver(post_save, sender=Auction)
def delete(self, sender, instance, *args, **kwargs):
instance.from1.delete
super(PostQuerySet, self).delete(*args, **kwargs)
forms.py:
class AcceptedForm(forms.ModelForm):
accepted = forms.BooleanField(required=False)
class Meta:
model = Post
fields = ('accepted',)
Views.py:
def accept_bid(request, post_id, bid_id):
post = get_object_or_404(Post, id=post_id)
bid = get_object_or_404(Bid, id=bid_id)
if request.method=='POST':
form = AuctionForm(request.POST or None)
form1 = AcceptedForm(request.POST)
if form.is_valid() and form1.is_valid():
accept_bid = form.save(commit=False)
accept_bid.bid = bid
accept_bid.post = post
accept_bid.post_owner = request.user
accept_bid.accepted = form1.save()
accept_bid.save()
form.save()
form1.save()
else:
form = AuctionForm()
form1 = AcceptedForm()
context = {
"bid_id" : bid_id,
"post_id" : post_id,
"bid": bid,
"post":post,
'form':form,
'form1': form1,
}
return render(request, 'loggedin_load/active_deals.html', context)
@ Adam_Starrh, ich tat, wie Sie gesagt hat, indem ein BooleanField Hinzufügen (angenommen) in meinem Beitrag Modell. In meiner accept_bid Ansicht übergebe ich diesen Wert mit einem ModelForm (AcceptedForm) wie in meiner Frage. Hier habe ich die Ansicht zum Speichern einer accept_bid-Instanz zusammen mit dem Speichern des BooleanField-Werts erstellt. Beim Speichern einer Instanz wird jedoch IntegrityError zurückgegeben: (1048, "Column 'date' darf nicht null sein"). Könnten Sie mir bitte in dieser Angelegenheit helfen !!! – sumanth
Klingt so, als müssten Sie entweder Informationen an das Feld "date" im Modell senden oder "null = True" für dieses Feld festlegen. Veröffentlichen Sie Ihr Modell und Ihre Ansichten in einer neuen Frage, wenn Sie weitere Unterstützung benötigen. –