Я изо всех сил пытаюсь найти хороший пример или лучшую практику для создания элегантного способа обновления / создания мутаций для связанных моделей с помощью 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" }) { ... }