簡體   English   中英

django POST在2個模型/數據庫表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM