[英]django POST in 2 models / database tables
我對此是絕對陌生的,剛剛完成了滿足我的需求的教程。 現在,我被困住了,因為我想同時保存POST訂單中的所有數據到2個模型中。 我想這個def create(self, valiated_data):
但Altkunde
表仍然是空的,而我得到了很多新的條目Kunde
模型。
經過數小時的研究,我找不到解決方案。
請提供任何提示或技巧。
這是我的models.py
class Kunde(models.Model):
QR = models.CharField(max_length=3, default='', primary_key=True)
created = models.DateTimeField(blank=True, auto_now_add=True)
Name = models.CharField(max_length=50, blank=True, default='')
Info = models.TextField(max_length=200, blank=True, default='')
owner = models.ForeignKey('auth.User', related_name='kunden', on_delete=models.CASCADE)
class Meta:
ordering = ('created',)
class AltKunde(models.Model):
QR = models.CharField(max_length=3, default='', primary_key=True)
created = models.DateTimeField(blank=True, auto_now_add=True)
Name = models.CharField(max_length=50, blank=True, default='')
Info = models.TextField(max_length=200, blank=True, default='')
Verleiher = models.OneToOneField(User, 'username')
class Meta:
ordering = ('created',)
views.py
class KundeViewSet(viewsets.ModelViewSet):
queryset = Kunde.objects.all()
serializer_class = KundeSerializer
permission_classes = [IsAdminUser]
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class AltKundeView(viewsets.ReadOnlyModelViewSet):
queryset = AltKunde.objects.all()
serializer_class = AltkundeSerializer
序列化器
class KundeSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Kunde #Kunden die Notebook leihen
fields = ('url', 'QR', 'owner', 'created', 'Name', 'Info')
def create(self, validated_data):
Altkundeeintrag = AltKunde.objects.create(**validated_data)
return Kunde.objects.create(**validated_data)
class AltkundeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = AltKunde #Kunden die Notebook geliehen haben (Altbestand)
fields = ('url', 'QR', 'Verleiher' 'created', 'Name', 'Info')
在您的models.py
您可以執行以下操作:
from django.dispatch import receiver
from django.db.models.signals import post_save
class Kunde(AbstractKunde):
...
class AltKunde(AbstractKunde):
...
@receiver(post_save, sender=Kunde)
def handle_Kunde_created(sender, instance, *args, **kwargs):
//kwargs['created'] will return True if a Kunde instance is created.
if not kwargs.get('created'):
// I'm not doing anything here, but potentially
// you can sync object updates here as well
return
AltKunde.objects.create(
QR=instance.QR,
created=instance.created,
Name=instance.Name,
Info=instance.Info,
Verleiher=instance.Verleiher)
在您的KundeSerializer中,您無需再執行此操作: Altkundeeintrag = AltKunde.objects.create(**validated_data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.