#python #django #django-models
#python #django #django-модели
Вопрос:
Я работаю над приложением для ставок / угадывания. Пользователь может делать ставки на все игры NFL и угадывать правильный результат. Итак, я создал 4 модели (2, соответствующие моей текущей проблеме):
class Customer(models.Model):
name = models.ForeignKey(User,on_delete=models.CASCADE)
points = models.IntegerField(null=True, default=0)
class Tipp(models.Model):
# model for one gameday (17 gamedays at all)
user = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True, blank=True)
week = models.ForeignKey(Game, on_delete=models.CASCADE, null=True, blank=True)
result_hometeam1 = models.IntegerField(null=True, blank=True)
result_guestteam1 = models.IntegerField(null=True, blank=True)
...
Таким образом, пользователь может делать ставки в 16 играх каждую неделю. Для этого я создал форму и внедрил в шаблон:
class Tipp_form(ModelForm):
class Meta:
model = Tipp
fields = '__all__'
# views.py
def week(request, pk):
game = Tipp.objects.get(id=pk)
form = Tipp_form(initial={'user':request.user, 'week':game}, instance=game)
if request.method == 'POST':
form = Tipp_form(request.POST, instance=game)
if form.is_valid():
form.save()
return render(request, 'main/week.html', {
'game': game,
'form': form,
})
все работает отлично, но теперь, если зарегистрируется новый пользователь, я не хочу создавать 17 новых недель с 16 играми каждый игровой день! Есть ли способ сказать: если новый пользователь вошел в систему, создайте 17 новых объектов в Tipp и установите user = новый пользователь?
Ответ №1:
Вы можете использовать сигналы для этого, чтобы каждый раз, когда создается новый пользователь, также создавались новые объекты для Tipp
, например:
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Tipp
@receiver(post_save, sender=User)
def create_user_picks(sender, instance, created, **kwargs):
if created:
Tipp.objects.create(user=instance)