ich Hilfe benötigen unter save_model Methode auf Django Rastrahmen bei der Umwandlung von Ich habe diese Methode auf meinem früheren django Modell AdminNeed Assistane bei der Umwandlung von django Modell Admin-Methode Django übriges Rahmen speichern
Bestehende Modeladmin
class JobCategoryAdmin(admin.ModelAdmin):
exclude = ('remote_addr',)
list_display = ['job_category','updated_by','updated_at','created_by','created_at','remote_addr',]
save_as = True
def save_model(self, request, obj, form, change):
if change: #When update
obj.updated_by = request.user
obj.updated_at = datetime.now()
obj.remote_addr = request.META['REMOTE_ADDR']
else: #When Create
obj.created_by = request.user
obj.created_at = datetime.now()
obj.updated_by = request.user
obj.remote_addr = request.META['REMOTE_ADDR']
obj.save()
Ich muss dies auf meine DRF-Methode anwenden. Momentan mache ich das so.
Serializer
class JobCategorySerializer(serializers.ModelSerializer):
class Meta:
model = JobCategory
fields = ('job_category',)
def create(self,validated_data):
obj = JobCategory.objects.create(**validated_data)
obj.created_by = self.context['request'].user
obj.updated_by = self.context['request'].user
obj.remote_addr = self.context['request'].META['REMOTE_ADDR']
obj.save()
return obj
def update(self,instance,validated_data):
obj = instance
obj.job_category = validated_data.get('job_category', obj.job_category)
obj.updated_by = self.context['request'].user
obj.remote_addr = self.context['request'].META['REMOTE_ADDR']
obj.save()
return obj
Hier bin ich mit dem Update nicht wohl, weil ich einmal alle Daten übergeben müssen wieder die ich in meinem bestehenden Modeladmin Methode von save_model nicht tun. Beispiel ob_category Feld wenn ich von X auf Y aktualisiere Ich möchte dies nicht in meiner Update Methode aufrufen.
Wenn es ein Feld ist, ist es immer noch akzeptabel, aber wenn ich für ein Modell tun muss, wo es 20 Felder sagen darf und ich nur ein Feld unter diesen aktualisieren, dann muss ich alle Felder in meinem Update angeben Methode.
Modell
class JobCategory(models.Model):
job_category = models.CharField(max_length=30,blank=False,null=False, unique=True,help_text="eg: DATASTAGE, CUSTOM_COMMAND")
created_by = models.ForeignKey(User, related_name='const_jc_created_by_user',blank=True, null=True, default=None, editable=False)
updated_by = models.ForeignKey(User, related_name='const_jc_updated_by_user', blank=True, null=True, default=None, editable=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
remote_addr = models.CharField(blank=True, default='',max_length=100)
class Meta:
ordering = ["job_category"]
verbose_name_plural = "Job Categories"
def __str__(self): # __unicode__ on Python 2
return self.job_category
Ansicht
class JobCategoryDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = JobCategory.objects.all()
serializer_class = JobCategorySerializer
Vielen Dank für Ihre Unterstützung
Vielen Dank für den Vorschlag. Das Durchlaufen von valided_data.keys() funktionierte für mich. ######### 'für attr in validated_data.keys(): setattr (obj, attr, validated_data.get (attr, getattr (obj, attr)))' #### ####### – just10minutes