Обновление / Создание Мутации с Джанго Графеном - PullRequest
1 голос
/ 13 апреля 2019

Я изо всех сил пытаюсь найти хороший пример или лучшую практику для создания элегантного способа обновления / создания мутаций для связанных моделей с помощью django и графена.

Допустим, у вас есть модельный адрес с отношением OneToOne с (город, штат, почтовый индекс)

class ZipCode(models.Model):
    zip = models.IntegerField(_("Zip"), blank=False)

    def __str__(self):
        return self.zip

    class Meta:
        verbose_name_plural = _('Zip codes')


class State(models.Model):
    state = models.CharField(_("State"), max_length=12, blank=False)

    def __str__(self):
        return self.state

    class Meta:
        verbose_name_plural = _('States')


class City(models.Model):
    city = models.CharField(_("City"), max_length=12, blank=False)

    def __str__(self):
        return self.city

    class Meta:
        verbose_name_plural = _('Cities')


class Address(models.Model):
    line_1 = models.CharField(_("Address Line 1"), max_length=256, blank=True)
    line_2 = models.CharField(_("Address Line 2"), max_length=256, blank=True)
    state = models.OneToOneField(
        State,
        related_name=_("address_state"),
        verbose_name=_("State"),
        on_delete=models.CASCADE,
        null=True
    )
    city = models.OneToOneField(
        City,
        related_name=_("address_city"),
        verbose_name=_("City"),
        on_delete=models.CASCADE,
        null=True
    )
    zipcode = models.OneToOneField(
        ZipCode,
        related_name=_("address_zipcode"),
        verbose_name=_("ZipCode"),
        on_delete=models.CASCADE,
        null=True)

    def __str__(self):
        return self.id

    class Meta:
        abstract = True
        verbose_name_plural = _("Addresses")

Как бы вы создали элегантную мутацию, которая может принимать запрос вроде:

mutation {
  updateAddress(addressData: {line_1: "Test"}, zipData: { zip: "12345" }, cityData: {city: "New York"}, stateData: { state: "NY" }) { ... }
...