Сохранение формы Django со ссылкой на внешний ключ - PullRequest
0 голосов
/ 02 мая 2018

У меня есть форма, которая ссылается на три модели, и я хочу сохранить элементы для каждой модели. Одна из моделей имеет ссылки на внешние ключи к другим моделям, и я тоже хочу их сохранить.

Мои модели выглядят так:

class Address(models.Model):
    housenumber = models.CharField(max_length=20,default='',blank=True)
    street = models.CharField(max_length=80,default='',blank=True)
    town = models.CharField(max_length=80,default='',blank=True)
    county = models.CharField(max_length=60,default='',blank=True)
    country = models.CharField(max_length=20,default='',blank=True)
    postcode = models.CharField(max_length=10,default='',blank=True)

class GeoLocation(models.Model):
    longitude = models.FloatField(default=-4.2576300)
    latitude = models.FloatField(default=55.8651500)

class Location(models.Model):
    locationname = models.CharField(max_length=80,default='',blank=True)
    address = models.ForeignKey(Address, on_delete=models.CASCADE)
    geolocation = models.ForeignKey(GeoLocation, on_delete=models.CASCADE, default='')

Мои взгляды выглядят так:

        if locationform.is_valid() and addressform.is_valid() and geolocationform.is_valid():
            locationform.save(commit=False)
            new_address = addressform.save()
            new_geolocation = geolocationform.save()
            locationform.address = new_address
            locationform.geolocation = new_geolocation
            locationform.save()

Это выдаст мне сообщение об ошибке «Не выполнено ограничение NOT NULL: location_location.address_id».

Кто-нибудь может помочь? Я новичок в Django, поэтому считаю, что это сложно.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Спасибо, Эдуардо, мне удалось заставить его работать со следующим кодом, почти таким же, как у вас:

    if locationform.is_valid() and addressform.is_valid() and geolocationform.is_valid():
        new_location = locationform.save(commit=False)
        new_address = addressform.save()
        new_geolocation = geolocationform.save()
        Location.objects.create(
            locationname= new_location.locationname,
            address=new_address,
            geolocation=new_geolocation)
0 голосов
/ 02 мая 2018

Одним из решений может быть:

if locationform.is_valid() and addressform.is_valid() and geolocationform.is_valid():
        new_address = addressform.save()
        new_geolocation = geolocationform.save()
        locationform.address = new_address
        locationform.geolocation = new_geolocation
        Location.objects.create(
            locationname=locationform.data.get('locationname', " ",
            address=new_address,
            geolocation=new_geolocation)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...