Как показать то же значение иностранного поля в панели администратора - имя поля это приз

Когда я генерирую код ваучера в имени класса уникальный код, мне нужно знать, как я могу показать то же значение поля приза в розыгрыше в соответствии с уникальным значением кода. Здесь мы можем видеть[ это панель администратора кода ваучера

это админпанель розыгрыша Теперь мне нужно такое же значение приза, как и в розыгрыше, в соответствии с уникальным кодом, Здесь мы видим на изображении, что должно быть justdo или 10% вместо nothing или sorry

models.py

import logging
import secrets
from django.db import models
from django.db.models.signals import post_save
Get an instance of a logger
logger = logging.getLogger(__name__)

class Draw(models.Model):
"""
Class to represent each valid draw that happened in the system.
"""
email = models.EmailField()
code = models.CharField(max_length=8)
sent = models.BooleanField(default=False)
rotation = models.IntegerField(default=0)
date = models.DateTimeField(blank=True, null=True)
prize = models.ForeignKey('Prize', on_delete=models.CASCADE, null=False, blank=False)
retry_used = models.BooleanField(default=False)

@classmethod
def post_create(cls, sender, instance, created, *args, **kwargs):
    """
    Connected to the post_save signal of the UniqueCodes model. This is used to set the
    code once we have created the db instance and have access to the primary key (ID Field).
    """
    # If new database record
    if created:
        # We have the primary key (ID Field) now so let's grab it
        id_string = str(instance.id)
        # Save the class instance
        instance.save()

def __str__(self):
    return f"{self.email} - {self.code}"


def use_retry(self):
    logger.info("use_retry!!!!!")
    self.retry_used = True
    self.save()

Connect the post_create function to the UniqueCodes post_save signal
post_save.connect(Draw.post_create, sender=Draw)    


class UniqueCode(models.Model):
"""
Class to create human friendly gift/coupon/voucher codes.
"""
# Model field for our unique code
code = models.CharField(max_length=20, blank=True, null=True, unique=True, default="Automatic 
Generated", editable=False)
used = models.BooleanField(default=False)
date = models.DateTimeField(blank=True, null=True, auto_now_add=True)
prize = models.ForeignKey('Prize', on_delete=models.CASCADE, null=True, blank=False)

@classmethod
def post_create(cls, sender, instance, created, *args, **kwargs):
    # If new database record
    if created:
        # We have the primary key (ID Field) now so let's grab it
        id_string = str(instance.id)
        # Define our random string alphabet
        # (notice I've omitted I,O,etc. as they can be confused for other characters)
        upper_alpha = "ABCDEFGHJKLMNPQRSTVWXYZ"
        # Create an 8 char random string from our alphabet
        random_str = "".join(secrets.choice(upper_alpha) for i in range(8))
        # Append the ID to the end of the random string
        instance.code = (random_str + id_string)[-8:]
        # Save the class instance
        instance.save()

def __str__(self):
    return f"{self.code} [Used: {self.used}]"
post_save.connect(UniqueCode.post_create, sender=UniqueCode)


class Prize(models.Model):
 label = models.CharField(max_length=20)
 winner = models.BooleanField(default=False)
 try_again = models.BooleanField(default=False)

def __str__(self):
    return self.label

views.py

import logging
from app.draw import calc_wheel_rotations, get_prize_result, is_code_valid, set_code_used, 
get_prize
from app.forms import DrawForm
from app.models import Draw, Prize
from django.shortcuts import render, redirect, get_object_or_404, get_list_or_404
from django.utils import timezone

# Get an instance of a logger
logger = logging.getLogger(__name__)


def draw_spin(request):
     logger.info(f"Draw_new with {request.method}")
     prizes = get_list_or_404(Prize)

if request.method == "POST":
    form = DrawForm(request.POST)

    if form.is_valid(): # and code is valid (checked on form class)
        email = form.cleaned_data['email']
        code = form.cleaned_data['code']
        logger.info(f"email [{email}] code [{code}]")

        instance = form.save(commit=False)
        instance.date = timezone.now()
        instance.rotation = calc_wheel_rotations()
        instance.prize = get_prize(get_prize_result(instance.rotation))
        instance.save()

        set_code_used(code, True)

        return render(request, 'index.html',
                      {'spin': True, 'result': instance.pk, 'rotation': instance.rotation, 
 'prizes': prizes})
    else:  # invalid form
        logger.warning(f"invalid form else => {form.is_valid()}")
        logger.warning(f"invalid form else => {form.errors}")
        form = DrawForm(request.POST)
else:
    form = DrawForm()  # No post data

return render(request, 'index.html', {'form': form, 'prizes': prizes})


def draw_result(request, pk):
    prizes = get_list_or_404(Prize)
    draw = get_object_or_404(Draw, pk=pk)
    logger.info(f"Draw with {request.method} for id {draw.pk}")

prize = get_prize(draw.prize.pk)
logger.info(f"Prize {prize.pk}, {prize.label}, {prize.winner}")

if prize.try_again:
    set_code_used(draw.code, False)

return render(request, 'draw.html', {'prizes': prizes, 'result_draw': draw, 'result_prize': 
prize})


def index(request):
    form = DrawForm()
    prizes = get_list_or_404(Prize)

return render(request, 'index.html',
              {'form': form, 'prizes': prizes})
Вернуться на верх