Python django POST在2个模型/数据库表中
我对这一点完全陌生,刚刚完成了我需要的教程。现在我被卡住了,因为我想同时保存两个型号的POST订单中的所有数据。我尝试了这个Python django POST在2个模型/数据库表中,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我对这一点完全陌生,刚刚完成了我需要的教程。现在我被卡住了,因为我想同时保存两个型号的POST订单中的所有数据。我尝试了这个def create(self,validated_data):但是Altkunde表仍然是空的,而我在Kunde模型中得到了很多新条目 经过几个小时的研究,我找不到解决办法 请给出任何提示或提示 这是我的型号。py class Kunde(models.Model): QR = models.CharField(max_length=3, default='', p
def create(self,validated_data):
但是Altkunde
表仍然是空的,而我在Kunde
模型中得到了很多新条目
经过几个小时的研究,我找不到解决办法
请给出任何提示或提示
这是我的型号。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',)
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')
视图.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',)
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')
序列化程序.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',)
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)
你能不能把views.py
和models.py
放在这里,不要链接。好的,我插入了整个代码。:)您可以使用Kunde
上的保存信号来保存AltKunde
我尝试了这些信号,但似乎无法获得正确的代码结构。有一个语法错误。