Django Forms - Получить объект, если существует - Уникальное поле - M2M - PullRequest
1 голос
/ 23 октября 2019

Я все еще младший с Джанго. Пожалуйста, объясните подробно: D

Я занимаюсь разработкой системы управления полными днями для ресторанов. Полный день может иметь много гостей, и у гостя может быть много полных дней. M2M Relationship.

Мои классы моделей:

class Full_day(models.Model):

    by = models.ForeignKey('users.System_user', on_delete=models.CASCADE)
    guests = models.ManyToManyField('users.Guest', verbose_name='Huespedes')
    business_unit = models.ForeignKey(
        'administration.Business_unit', on_delete=models.CASCADE, verbose_name='Unidad de Negocio')
    type_full_day = models.ForeignKey(cat_full_day, on_delete=models.CASCADE)

    created = models.DateField(
        auto_now=True, auto_now_add=False, verbose_name='Creado el')
    modified = models.DateField(
        auto_now=False, auto_now_add=True, verbose_name='Modificado el')

class Guest(models.Model):
    stature_choices=(
        ('+ 1.20', '+ 1.20 M'),
        ('- 1.20', '- 1.20 M')
    )

    name = models.CharField(max_length=50, verbose_name='Nombre')
    document_id = models.PositiveIntegerField(unique=True, verbose_name='Cedula/Documento Identidad', blank=True, null=True)
    stature = models.CharField(verbose_name='Estatura', choices = stature_choices, max_length=6)

    created = models.DateField(auto_now=True, auto_now_add=False, verbose_name='Creado el')
    modified = models.DateField(auto_now=False, auto_now_add=True, verbose_name='Modificado el')

Проблема : как вы видите, document_id должно быть уникальным, я хочу, чтобы представление получилогостю, если он уже существует, обновить его и назначить на полный день.

Количество гостей на полный день зависит от типа полного дня, я уже решил его с помощью GET (см. это в представлении), и я отобразил количество GuestForm в соответствии с этим.

Мне нужна помощь в логике проверки.

Если есть лучший способ сделать это, возможно, сCreateView Я тоже мог бы его использовать!

Спасибо!

def Test(request):
    if request.method == 'POST':
        cat = request.GET['cf']
        typefd = cat_full_day.objects.get(pk = cat)

        fform = Full_dayForm(request.POST)
        gforms = [GuestForm(request.POST, prefix=str(x)) for x in range(typefd.guests)]

    #MAGIC HERE
    #IF GUEST IN FORM EXIST UPDATE AND ASSING TO FULL_DAY
    #THEN SAVE

    elif (request.method == 'GET'):        
        cat = request.GET['cf']
        typefd = cat_full_day.objects.get(pk = cat)
        fform = Full_dayForm()
        gforms = [GuestForm(prefix=str(x)) for x in range(typefd.guests)]
        context = {
            'typefd' : typefd,
            'fform' : fform,
            'gforms' : gforms,
        }

        return render(request, 'full_days/new_full_day.html', context)
    else:
        redirect('full_days:index')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...