J'ai créé un projet Django dans lequel les utilisateurs de type 1 peuvent créer un Post et les utilisateurs de type 1 peuvent enchérir sur un post. Enfin, une vente aux enchères a lieu et un post-propriétaire peut accepter une enchère. Après tout ce processus, j'ai voulu supprimer l'instance de publication de la base de données, afin qu'elle n'apparaisse pas dans post_queryset. Pour cela, je suis tenté d'utiliser un signal qui est reçu après une vente aux enchères et je l'ai gardé avant la suppression d'une instance du modèle Post. Mais ça ne marche pas. Y a-t-il une approche pour résoudre ce problème? J'apprécierais m'aider à réaliser ceci.Python/Django: Comment supprimer une instance automatiquement après une action?
Voici mon 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, je l'ai comme vous l'avez dit en ajoutant un BooleanField (accepté) dans mon modèle Post. Dans ma vue accept_bid je passe cette valeur avec un ModelForm (AcceptedForm) comme dans ma question. Ici, j'ai fait la vue pour enregistrer une instance accept_bid avec la sauvegarde de la valeur BooleanField. Mais lors de la sauvegarde d'une instance, elle retourne IntegrityError: (1048, "Date de la colonne" ne peut pas être nulle "). Pourriez-vous s'il vous plaît m'aider sur cette question !!! – sumanth
Il semble que vous ayez besoin de fournir des informations au champ 'date' du modèle, ou de définir' null = True' sur ce champ. Publiez votre modèle et vos vues dans une nouvelle question si vous avez besoin d'aide supplémentaire. –